此问题在此处已有答案:
Streaming a large file using PHP(5个答案)
28天前关闭。
我构建PHP动态下载使用此代码
<?php
include '../wp-config.php';
global $wpdb;
$allowed=false;
$user_login=wp_get_current_user();
$usersn=explode(".",str_replace("http://","",$user_login->user_url));
$usermesin=$usersn[0];
if(strtoupper(trim($usermesin))=='ALLN' || strtoupper(trim($usermesin))=='TES'){
$allowed=true;
}
// Define the directory where your files are stored
$fileDirectory = 'downloads/';
// Get the file name from a query parameter (e.g., ?file=example.txt)
$fileName = isset($_GET['file']) ? $_GET['file'] : '';
// Check if the file exists in the directory
if (!empty($fileName) && file_exists($fileDirectory . $fileName)) {
$filePath = $fileDirectory . $fileName;
// Set the appropriate headers for the download
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . (($allowed)? basename($filePath) :'permission-denied.txt') . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filePath));
// Output the file for download
if($allowed){
readfile($filePath);
}else
{
echo"You don't have permission to download this file";
}
exit;
// echo 'dapat file '.(($allowed)?'software' :'permission-denied.txt');
} else {
// Handle file not found, e.g., display an error message
echo 'File not found.';
}
?>
字符串
但这场演出
致命错误:/home/public_html/wp-includes/functions.php第5349行无法找到请求的URL所对应的网页
而不是downlod文件,当我运行这段代码在本地它的工作预期,因为我改变了内存限制,如何正确的方式来读取文件?
1条答案
按热度按时间bf1o4zei1#
“已耗尽允许的内存大小”表示PHP脚本试图分配超过允许限制的内存。
在你的例子中,
readfile
函数导致了这个问题。当你试图读取和输出一个大文件时,可能会发生这种情况,而脚本内存不足。要解决此问题并有效地处理大文件,您可以使用
fread
和echo
来以较小的块流式传输文件,而不是使用readfile
。这将防止脚本尝试将整个文件一次加载到内存中。它以较小的块(本示例中为8KB)读取和流式传输文件,以防止耗尽内存。下面是使用这种方法的代码的修改版本:
字符串