PHP CURL PUT из пути к файлу - PullRequest
       19

PHP CURL PUT из пути к файлу

3 голосов
/ 08 сентября 2011

Я пытаюсь сделать CURL PUT с файлом, но у меня возникают проблемы.

Вот мой код:

$url_path_str = 'http://my_url';
$file_path_str = '/my_file_path';

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, ''.$url_path_str.'');
curl_setopt($ch, CURLOPT_PUT, 1);

$fh_res = fopen($file_path_str, 'r');
$file_data_str = fread($fh_res, filesize($file_path_str));

curl_setopt($ch, CURLOPT_INFILE, $fh_res);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($file_path_str));
fclose($fh_res);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$curl_response_res = curl_exec ($ch);

Срок действия сценария истекает, и я не знаю, почему.

Буду признателен за помощь. Спасибо.

Ответы [ 3 ]

11 голосов
/ 08 сентября 2011

Я понял это. Это случилось из-за fclose, который стал причиной проблемы. Я просто поставил его после curl_exec.

Вот исправленный код:

$url_path_str = 'http://my_url';
$file_path_str = '/my_file_path';

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, ''.$url_path_str.'');
curl_setopt($ch, CURLOPT_PUT, 1);

$fh_res = fopen($file_path_str, 'r');

curl_setopt($ch, CURLOPT_INFILE, $fh_res);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($file_path_str));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$curl_response_res = curl_exec ($ch);
fclose($fh_res);

Надеюсь, это пригодится кому-то еще позже.

Приветствие.

0 голосов
/ 08 сентября 2011

Если вы абсолютно уверены, что время соединения истекло, и ничего больше .. тогда вы можете добавить следующие строки кода:

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1000);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000 );
0 голосов
/ 08 сентября 2011

Я не уверен на 100%, что это проблема, но я вижу только то, что вы читаете содержимое файла с помощью fread(), когда вам это не нужно, и ничего не делаете сданные.Это оставит указатель в конце файла, и cURL будет ожидать данные от указателя, которые он никогда не получит.

Удалите эту строку и посмотрите, не возникла ли у вас проблема:

$file_data_str = fread($fh_res, filesize($file_path_str));

В качестве альтернативы, если вам действительно нужны данные из файла и вы используете переменную $file_data_str позже в сценарии, поместите эту строку сразу после указанной выше:

rewind($fh_res);

РЕДАКТИРОВАТЬ

Кроме того, я совсем не уверен в этом: ''.$url_path_str.'' - вы должны просто быть в состоянии сделать это $url_path_str, и это будет иметь тот же эффект, но будет (немного) более ресурсосберегающий.

...