为什么 PHP 无法打开流,权限被拒绝使用模式 w+ fopen?

Why is PHP unable to open a stream, permission denied using mode w+ fopen?

我在 Windows 10。我正在使用包装 Apache 的 laragon 开发环境。

我正在尝试 运行 以下 guzzle 调用来下载文件:

 $downloadClient = new Client(['base_uri' => 'https://vendor/region']);
 $downloadResponse = $downloadClient->request('GET','endpoint/file_url.txt',['sink' => __DIR__]);

我在 return 中不断收到以下内容:

Fatal error: Uncaught RuntimeException: Unable to open C:\laragon\www\act using mode w+: fopen(C:\laragon\www\act): failed to open stream: Permission denied in C:\laragon\www\act\vendor\guzzlehttp\psr7\src\functions.php:303 Stack trace: #0 [internal function]: GuzzleHttp\Psr7{closure}(2, 'fopen(C:\larago...', 'C:\laragon\www\...', 311, Array) #1 C:\laragon\www\act\vendor\guzzlehttp\psr7\src\functions.php(311): fopen('C:\laragon\www\...', 'w+') #2 C:\laragon\www\act\vendor\guzzlehttp\psr7\src\LazyOpenStream.php(37): GuzzleHttp\Psr7\try_fopen('C:\laragon\www\...', 'w+') #3 C:\laragon\www\act\vendor\guzzlehttp\psr7\src\StreamDecoratorTrait.php(31): GuzzleHttp\Psr7\LazyOpenStream->createStream() #4 C:\laragon\www\act\vendor\guzzlehttp\psr7\src\StreamDecoratorTrait.php(136): GuzzleHttp\Psr7\LazyOpenStream->__get('stream') #5 C:\laragon\www\act\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php(395): GuzzleHttp\Psr7\LazyOpenStream->write(' in C:\laragon\www\act\vendor\guzzlehttp\psr7\src\functions.php on line 303

我已经尝试将 "Full Control" 授予我的用户帐户,这就是 Laragon 运行ning 的用途。我还尝试将目录中的所有内容授予 IUSR 和 "all users",现在得到结果。

感谢任何帮助。

您将 __DIR__ 作为写入文件的 "sink" 传递。那是一个目录。您不能像将数据写入文件一样将数据写入目录。尝试使用文件名。

$downloadClient = new Client(['base_uri' => 'https://vendor/region']);
$downloadResponse = $downloadClient->request('GET','endpoint/file_url.txt',
      ['sink' => "file_url.txt"]);