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