PHP curl не может загрузить данные при выводе в файл, но нормально при печати на стандартный вывод - PullRequest
0 голосов
/ 06 апреля 2011

Меня это уже буквально часами беспокоит.

Не могу понять, почему PHP cURL не загружает данные в файл .(CURLOPT_FILE установлен в локальный файл.) Я не получаю никаких данных.Я периодически проверяю размер файла конечного файла, и он всегда равен нулю.Для справки я загружаю файл JPEG размером 90 КБ (для целей тестирования).

Это работает на моем локальном компьютере (XP), но не на веб-сайте, на котором я работаю (Windows Server 2003).

Я провел несколько тестов, которые сделали сценарий еще более странным.

  1. Я отключил CURLOPT_FILE для печати данных, возвращаемых curl, в стандартный вывод и двоичных данных.напечатано .

  2. Имея ранее заблокированные веб-сайты (так как сервер реализует контроль доступа), я попытался получить доступ к файлу из Internet Explorer, и я смог его увидеть.

  3. Испытав заблокированные загрузки ранее, я попытался загрузить файл из Internet Explorer, и он был загружен.

  4. Файл создан fopen ('','w'), но размер остается равным 0. Несмотря на это успешное создание файла, я подумал, что, возможно, у PHP проблема с правами на запись в файловую систему, я настроил запуск exe-файла даже пользователями без прав администратора.Все еще не загружается.

Это когда-нибудь происходило с кем-либо?

Будут благодарны любые указатели.Я действительно застрял.

Спасибо.

Вот параметры скручивания, которые я установил:

$connection = curl_init($src);

// If these are not set, curl_exec outputs data.
// If these are set, curl_exec does not send any data to the file
// pointed to by $file_handler. $file_handler is not null
// because it is opened as write (non-existing file is created)

curl_setopt($connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt( $connection, CURLOPT_FILE, $file_handler );

PS: я делаю эти тесты, используя командную строку, а небраузер.

Ответы [ 3 ]

1 голос
/ 17 октября 2012

Я не думаю, что вам нужно установить CURLOPT_RETURNTRANSFER, и если вы работаете из командной строки, обязательно запустите php с правами администратора. Не знаю, как это работает в Windows, но в Linux я всегда выполняю все сценарии командной строки, которые запускаю.

Кроме того, если включен безопасный режим php, обязательно укажите для каталога того же владельца (UID), что и для файла php. Хм, но так как вы можете создать файл (с размером 0 файлов), он может не иметь ничего общего с правами ... не могли бы вы проверить параметр * open_basedir * php на вашем сервере? Если установлено, cUrl не разрешено использовать файловый протокол ... Вы проверяли файлы журналов с вашего сервера? возможно есть ошибка.

1 голос
/ 22 июня 2011

у вас могут отсутствовать разрешения на запись в файл.

0 голосов
/ 08 декабря 2015

Вам может понадобиться выяснить, какой пользователь запускает ваш php, если пользователь, выполняющий скрипт php (тот, который вызывает php), не авторизован для записи в каталог файла или в / path / to / file, вам может потребоваться настроить права доступа к файлам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...