gpt4 book ai didi

php - file_get_contents 大文件上传

转载 作者:行者123 更新时间:2023-12-05 09:22:21 28 4
gpt4 key购买 nike

我正在尝试使用 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 将整个文件的内容作为单个字符串变量返回。在您的情况下,这意味着它将尝试创建 2 GB 的变量,这会耗尽允许的脚本内存。

尝试使用 fopenfgets。这将允许您以较小的 block 处理文件。

$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 - file_get_contents 大文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27492007/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com