PHP 文件传输 - 回声破坏了东西,调试的替代方案?
PHP File Transer - echo breaks things, alternate for debugging?
看看我的另一个 。
我已经成功设置了一个简单的文件传输,但我注意到尝试回显页面上的任何内容会损坏文件,使其无法打开。
代码如下:
$filename = $_GET['filename'];
$dir = "C:/Users/Me/Desktop/";
$file = realpath($dir . $filename);
//echo "$filename</br>$dir</br>$file";
if (file_exists($file)) {
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Content-Type: application/octet-stream');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
这工作得很好,但如果我取消注释回显,下载的文件已损坏并且无法打开。
这是因为不知何故,回显被写入要下载的文件吗?也许(可能)我没有完全了解上面发生的过程。
显然,如果上述代码执行成功,则不会显示回显,但您还推荐哪些其他调试方法?显然,回显变量值并不总是有效。还有其他选择吗?
是的,如果您回显某些数据,它将成为您发送的任何文件的一部分并可能损坏它。
我建议您查看 error_log
函数。它会让您写入日志文件,这不会影响输出。您可以定期查看日志并检查是否有任何重要错误。
看看我的另一个
我已经成功设置了一个简单的文件传输,但我注意到尝试回显页面上的任何内容会损坏文件,使其无法打开。
代码如下:
$filename = $_GET['filename'];
$dir = "C:/Users/Me/Desktop/";
$file = realpath($dir . $filename);
//echo "$filename</br>$dir</br>$file";
if (file_exists($file)) {
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Content-Type: application/octet-stream');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
这工作得很好,但如果我取消注释回显,下载的文件已损坏并且无法打开。
这是因为不知何故,回显被写入要下载的文件吗?也许(可能)我没有完全了解上面发生的过程。
显然,如果上述代码执行成功,则不会显示回显,但您还推荐哪些其他调试方法?显然,回显变量值并不总是有效。还有其他选择吗?
是的,如果您回显某些数据,它将成为您发送的任何文件的一部分并可能损坏它。
我建议您查看 error_log
函数。它会让您写入日志文件,这不会影响输出。您可以定期查看日志并检查是否有任何重要错误。