PHP file_get_contents и cURL поднимают ошибку http 500 на внутреннем сервере

0

Я использую функцию внутри класса PHP для чтения изображений из массива URL-адресов и записи их на локальном компьютере.

Что-то вроде ниже:

function ImageUpload($urls)
{
  $image_urls = explode(',', $urls);  
  foreach ($image_urls as $url)
  {
    $url = trim($url);
    $img_name = //something
    $source = file_get_contents($url);
    $handle = fopen($img_name, "w");
    fwrite($handle, $source);  
    fclose($handle);
  }
}

Он успешно читает и пишет 1 или 2 изображения, но поднимает 500 Internal severs для чтения второго или третьего изображения. В файле журнала Apache нет ничего важного. Также я заменяю команду file_get_contents следующими операторами cURL, но результат такой же (кажется, cURL читает еще одно изображение, чем file_get_contents).

$ch=curl_init();        
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,500);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
$source = curl_exec($ch);
curl_close($ch);
unset($ch);

Также проблема заключается только в чтении с URL-адресов http, и если у меня есть изображения где-то локально, нет никаких проблем для их чтения и записи.

  • 0
    500 не приходит с сервера, с которого вы пытаетесь читать? Если это так, то информация об ошибке должна быть в журнале этого сервера, а не в вашем.
  • 0
    У меня нет доступа к целевому серверу. если я читаю изображения по одному и эхом на экране, проблем не будет. но когда я пытаюсь прочитать все из них в цикле, генерируется ошибка.
Показать ещё 2 комментария
Теги:
curl
file-get-contents

2 ответа

0

Я внес некоторые изменения в ваш код, надеюсь, что это поможет :)

$opts = array( 
        'http' => array( 
            'method'=>"GET", 
            'header'=>"Content-Type: text/html; charset=utf-8" 
        ) 
    );

$context = stream_context_create($opts); 
$image_urls = explode(',', $urls);  
foreach ($image_urls as $url) {
    $result = file_get_contents(trim($url),TRUE,$context);
    if($result === FALSE) {
        print "Error with this URL : " . $url . "<br />";
        continue; 
    }
    $handle = fopen($img_name, "a+");
    fwrite($handle, $result);  
    fclose($handle);
}
  • 0
    Благодарю. Да, они являются правильными URL
  • 0
    Можете ли вы дать мне URL, чтобы попробовать?
Показать ещё 5 комментариев
0

Я не вижу обработчика для чтения в цикле, ваш $handle = fopen($img_name, "w"); просто для записи, вам также нужно $handle = fopen($img_name, "r"); для чтения ! потому что вы не можете прочитать handle (fread()) для fopen($img_name, "w"); ,

Дополнительный ответ:

Могли бы вы изменить (и посмотреть, работает ли он):

.........
$img_name = //something
$context = stream_context_create($image_urls );
$source= file_get_contents(  $url ,false,$context);
.....
.....
  • 0
    Благодарю. file_get_contents читает весь файл в строку
  • 0
    @Amir, посмотри мое обновление
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню