2

我在共享主机上托管我的网站,最近将服务器更改为安全模式(甚至没有通知)。我使用从服务器下载文件的功能,使用readfile()函数(我使用 php)。现在,在安全模式下,此功能不再可用。是否有替代或解决方法来处理用户能够下载文件的情况?

谢谢

4

2 回答 2

8

正如我在评论中所写,readfile()通过将其包含在disable_functions php.ini指令中来禁用它。它与安全模式无关。尝试检查哪些功能被禁用,看看您是否可以使用任何其他文件系统功能(-s)来执行此readfile()操作。

要查看禁用功能的列表,请使用:

var_dump(ini_get('disable_functions'));

您可能会使用:

// for any file
$file = fopen($filename, 'rb');
if ( $file !== false ) {
    fpassthru($file);
    fclose($file);
}

// for any file, if fpassthru() is disabled
$file = fopen($filename, 'rb');
if ( $file !== false ) {
    while ( !feof($file) ) {
        echo fread($file, 4096);
    }
    fclose($file);
}

// for small files;
// this should not be used for large files, as it loads whole file into memory
$data = file_get_contents($filename);
if ( $data !== false ) {
    echo $data;
}

// if and only if everything else fails, there is a *very dirty* alternative;
// this is *dirty* mainly because it "explodes" data into "lines" as if it was
// textual data
$data = file($filename);
if ( $data !== false ) {
    echo implode('', $data);
}
于 2011-06-13T12:20:09.297 回答
1

readfile正如您所说的“从服务器”,我假设您正在使用加载远程文件。如果这是正确的,您的问题不是安全模式,而是不再允许使用普通 php 文件功能打开 URL(设置allow_url_fopen禁用)。

在这种情况下,您可以使用 PHP 的curl 函数来下载文件。此外,file_get_contents是一个有效的替代方案。

于 2011-06-13T10:53:47.657 回答