我正在使用Symfony / Process在Laravel的web.php路由中从Laravel Dusk运行测试。这是我正在使用的代码:
Route::get('/scraping', function () {
$process = new Process('cd pathtoartisan && C:\xampp\php\php.exe artisan dusk -v');
$process->setPTY(true);
$process->run();
if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
}
echo '<pre>'.$process->getOutput();
});
我认为它可以正常工作,但出现此错误:
Symfony \ Component \ Process \ Exception \ RuntimeException:一个临时 无法打开文件以写入过程输出: fopen(C:\ WINDOWS \ sf_proc_00.out.lock):无法打开流: 权限被拒绝
在C:... \ laravel-master \ vendor \ symfony \ process \ Pipes \ WindowsPipes.php:60
> $file = sprintf('%s\\sf_proc_%02X.%s',$tmpDir, $i, $name);
> if (!$h = fopen($file.'.lock', 'w')) {
> restore_error_handler();
> throw new RuntimeException(sprintf('A temporary file could not be opened to write the process output: %s', $lastError)); }
我已经在Symfony文档中阅读到以下命令应该对我有帮助:
chmod -R 777 var / log /
但是我正在使用Windows,但我不知道该如何获取,也不知道该命令是否正确,或者我是否应该授予其他文件许可。
答案 0 :(得分:0)
根据@zerkms的建议,尝试将临时目录更改为默认情况下可写的Laravel存储。
Route::get('/scraping', function () {
putenv('TMPDIR=' . storage_path()); // <- override the temp dir
$process = new Process('cd pathtoartisan && C:\xampp\php\php.exe artisan dusk -v');
$process->setPTY(true);
$process->run();
if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
}
echo '<pre>'.$process->getOutput();
});