php get上传文件,php – file_get_contents大文件上传

标签:php

我试图用fsockopen上传一个2gb以上的大文件.但是对于file_get_content,出现以下错误,我无法将大文件存储在内存中.我需要以块的形式发送数据,但无法弄清楚我将如何执行此操作.请有人能指导我吗?

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 727826869 bytes) in

$file_info = finfo_open(FILEINFO_MIME);

$mime_type = finfo_file($file_info, $file_loc);

$file = file_get_contents($file_loc);

$fp = fsockopen($host, 80, $errno, $errstr, 30);

if ($fp) {

$out = "POST /upload/".basename($url)." HTTP/1.1\r\n";

$out .= "Host: ".$host."\r\n";

$out .= "Accept-Language: en-US,en;q=0.8\r\n";

$out .= "Content-Type: ".$mime_type."\r\n";

$out .= 'Content-Length: ' . filesize($file_loc) . "\r\n";

$out .= "Content-Disposition: attachment; filename=\"".urlencode(basename($file_loc))."\"\r\n\r\n";

fwrite($fp, $out);

fwrite($fp, $file);

$response = '';

while (!feof($fp)) {

$response .= fgets($fp, 128);

}

fclose($fp);

解决方法:

file_get_contents将整个文件的内容作为变量返回.在你的情况下,这意味着它将尝试创建2GB变量,耗尽允许的内存.

尝试使用fopen和fgets.这将允许您以较小的块处理文件.

$file_info = finfo_open(FILEINFO_MIME);

$mime_type = finfo_file($file_info, $file_loc);

$fileHandle = fopen($file_loc);

$fp = fsockopen($host, 80, $errno, $errstr, 30);

if ($fp) {

$out = "POST /upload/".basename($url)." HTTP/1.1\r\n";

$out .= "Host: ".$host."\r\n";

$out .= "Accept-Language: en-US,en;q=0.8\r\n";

$out .= "Content-Type: ".$mime_type."\r\n";

$out .= 'Content-Length: ' . filesize($file_loc) . "\r\n";

$out .= "Content-Disposition: attachment; filename=\"".urlencode(basename($file_loc))."\"\r\n\r\n";

fwrite($fp, $out);

while(!feof($fileHandle)){

fwrite($fp, fgets($fileHandle, 1024));

}

fclose($fileHandle);

$response = '';

while (!feof($fp)) {

$response .= fgets($fp, 128);

}

fclose($fp);

标签:php

来源: https://codeday.me/bug/20191007/1867939.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值