Symfony /进程许可被拒绝

时间:2019-09-02 22:49:25

标签: php laravel symfony symfony-process symfony-4.3

我正在使用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,但我不知道该如何获取,也不知道该命令是否正确,或者我是否应该授予其他文件许可。

1 个答案:

答案 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();
});