Можно ли передавать файл на сервер и с серверов, не сохраняя данные в оперативной памяти? - PullRequest
0 голосов
/ 29 марта 2010

PHP вопрос (впервые в PHP после 10 лет Perl, arrggghhh!).

У меня есть файл размером 100 МБ, который я хочу отправить на другой сервер.

Мне удалось прочитать файл и "опубликовать" его без curl (не могу использовать curl для этого приложения). На мелких файлах все работает нормально.

Однако при работе с большими файлами PHP жалуется на невозможность выделить память.

Есть ли способ открыть файл построчно и отправить его как пост ТАКЖЕ построчно?

Таким образом, в оперативной памяти ничего не удерживается, что предотвращает мои ошибки и обходит строгие ограничения.

Chris

Вот мой текущий код ошибки больших файлов:

<?php
ini_set('display_errors',1);
error_reporting(E_ALL|E_STRICT);

$resp = do_post_request("/local/file.txt","http://www.mysite.com/receivedata.php");
exit;

function do_post_request($file,$url){
   $fileHandle = fopen($file, "rb");
   $fileContents = stream_get_contents($fileHandle);
   fclose($fileHandle);

   $params = array(
      'http' => array
      (
          'method' => 'POST',
          'header'=>"Content-Type: multipart/form-data\r\n",
          'content' => $fileContents
      )
   );

   $ctx = stream_context_create($params);
   $fp = fopen($url, 'rb', false, $ctx);

   $response = stream_get_contents($fp);
   return $response;
}
?>

1 Ответ

1 голос
/ 29 марта 2010

Вы можете использовать fopen и fgets (или fread в качестве альтернативы) для последовательного чтения файла.

Однако, если ваша единственная цель - сбросить файл на стандартный вывод, вы можете просто использовать readfile('filename'), и он будет делать то, что вы хотите.

...