mikehaertl/php-tmpfile
Create and manage secure temporary files in PHP with an object-oriented API. php-tmpfile handles creation, automatic cleanup, and safe paths across platforms—ideal for generating intermediate output, working with CLI tools, or handling uploads without manual temp file housekeeping.
php-tmpfile package remains well-aligned with Laravel’s temporary file needs, particularly for scenarios requiring resilience to user disconnections (e.g., long-running CLI commands, background jobs, or HTTP requests where clients may abort prematurely). The new ignoreUserAbort option addresses a critical edge case in Laravel’s context, where temporary files might otherwise linger due to aborted requests or processes.ignoreUserAbort maintains the package’s builder pattern while introducing a configuration flag, which aligns with Laravel’s preference for explicit, fluent APIs (e.g., TmpFile::create(['ignoreUserAbort' => true])).php artisan import:csv).TmpFile::create(['ignoreUserAbort' => true])->write($data);
// Guaranteed cleanup even if the request/process aborts.
pcntl_signal or Laravel’s Process facade to simulate crashes).ignoreUserAbort flag may add negligible overhead to file operations, but this is unlikely to impact performance in Laravel’s typical use cases.ignoreUserAbort unnecessarily for short-lived operations (e.g., simple API responses), but this is a low-risk trade-off for resilience.tmpfile() suggests this is unlikely to be an issue.ignoreUserAbort be enabled by default in Laravel’s queue workers and CLI commands, or left explicit to avoid unintended overhead?ignoreUserAbort be tied to specific events (e.g., job.failed) or handled at the service layer?ignoreUserAbort interact with cloud provider cleanup policies (e.g., S3 object expiration)?TmpFile cleanup is tested under simulated process termination (e.g., via pcntl_signal_dispatch)?Storage facade or FilesystemAdapter implementations.ignoreUserAbort flag can be combined with Laravel’s events (e.g., job.processing, http.kernel.handle) to enforce cleanup policies. For example:
event(new TmpFileCreated($tmpFile, ['ignoreUserAbort' => true]));
ignoreUserAbort in critical paths where process termination is a risk (e.g., queued jobs, CLI commands).// In a Laravel job
public function handle() {
$tmpFile = TmpFile::create(['ignoreUserAbort' => true])->write($this->data);
// Process file...
}
ignoreUserAbort in a Laravel service provider or config file for consistency:
// config/tmpfile.php
'defaults' => [
'ignore_user_abort' => env('QUEUE_WORKER', false),
];
TmpFile cleanup in failure scenarios (e.g., job.failed, illuminate.queue.worker.failed).Process::expectsExitCode() to simulate crashes).ignoreUserAbort under simulated crashes.ignoreUserAbort will surface as PHP warnings or missing files, easily diagnosable via Laravel’s error handlers or log monitoring.| Failure Scenario | Impact | Mitigation |
|---|---|---|
Worker crash with ignoreUserAbort |
Orphaned temp files (unlikely) | Validate cleanup via Laravel logs |
Misconfigured ignoreUserAbort |
Unnecessary overhead | Disable for short-lived operations |
| Cloud storage misconfiguration | Temp files persist indefinitely | Add TTL or lifecycle policies |
| Permission issues | Cleanup fails | Ensure storage/framework is writable |
App\Jobs\*).app/Console/Commands/).ignoreUserAbort behavior under simulated crashes (e.g., using Process::terminate()).## Best Practices for File-Heavy Jobs
Enable `ignoreUserAbort` for temporary files to prevent orphans:
```php
TmpFile::create(['ignoreUserAbort' => true])->write($data);
How can I help you explore Laravel packages today?