0

我正在使用 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 变量/日志/

但是我使用的是 Windows,我不知道如何获得它,也不知道该命令是否正确,或者我是否应该授予其他文件的权限。

4

1 回答 1

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();
});
于 2019-09-02T23:16:03.817 回答