Почему PHP не может открыть поток, в режиме w + fopen отказано в разрешении? - PullRequest
0 голосов
/ 25 марта 2020

Я на Windows 10. Я использую среду разработки Laragon, которая включает apache.

Я пытаюсь выполнить следующий вызов, чтобы загрузить файл:

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

В ответ я получаю следующее:

Неустранимая ошибка: Uncaught RuntimeException: Невозможно открыть C: \ laragon \ www\act в режиме w +: fopen (C: \ laragon \ www\act): не удалось открыть поток: в C: \ laragon \ * 1011 отказано в разрешении * \ vendor \ guzzlehttp \ psr7 \ src \ functions. php: 303 Трассировка стека: # 0 [внутренняя функция]: GuzzleHttp \ Psr7 {closure} (2, 'fopen (C: \ lara go ..) . ',' 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 в строке 303

Я пытался предоставить "Полный доступ" "на мою учетную запись пользователя, что и работает Laragon. Я также попытался предоставить все IUSR и «всем пользователям» в каталоге с результатами, которые были получены.

Любая помощь приветствуется.

1 Ответ

3 голосов
/ 25 марта 2020

Вы передаете __DIR__ в качестве «раковины» , куда записать файл. Это каталог. Вы не можете записывать данные в каталог, как это был файл. Попробуйте использовать имя файла.

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