Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否可以在不将数据保存在ram中的情况下将文件流式传输到服务器或从服务器流式传输文件?_Php_Apache_File Io - Fatal编程技术网

Php 是否可以在不将数据保存在ram中的情况下将文件流式传输到服务器或从服务器流式传输文件?

Php 是否可以在不将数据保存在ram中的情况下将文件流式传输到服务器或从服务器流式传输文件?,php,apache,file-io,Php,Apache,File Io,PHP问题(在使用Perl 10年后,PHP还是一个新问题,arrggghh!) 我有一个100mb的文件要发送到另一台服务器 我已经成功地在中读取文件,并在没有curl的情况下“发布”它(无法在此应用程序中使用curl)。在较小的文件上一切都正常 然而,对于较大的文件,PHP抱怨无法分配内存 有没有办法一行一行地打开一个文件,并将其作为一个帖子一行一行地发送 通过这种方式,ram中没有任何内容,从而防止了我的错误并绕过了严格的限制 克里斯 以下是我当前在处理大文件时出错的代码: <?ph

PHP问题(在使用Perl 10年后,PHP还是一个新问题,arrggghh!)

我有一个100mb的文件要发送到另一台服务器

我已经成功地在中读取文件,并在没有curl的情况下“发布”它(无法在此应用程序中使用curl)。在较小的文件上一切都正常

然而,对于较大的文件,PHP抱怨无法分配内存

有没有办法一行一行地打开一个文件,并将其作为一个帖子一行一行地发送

通过这种方式,ram中没有任何内容,从而防止了我的错误并绕过了严格的限制

克里斯

以下是我当前在处理大文件时出错的代码:

<?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;
}
?>

您可以使用
fopen
fgets
(或者
fread
按顺序读取文件


但是,如果您的唯一目的是将文件刷新为标准输出,那么只需使用
readfile('filename')
,它就可以完全满足您的需要。

我想从cron作业运行的命令行php脚本将数据发布到URL。这有区别吗?没有,因为readfile输出到PHP的输出缓冲区,所以需要使用fgets/fread来实现。我已经发布了一些代码来解释我的意思。我到处都找过了,什么都没有——或者我找错了方向