我在内容管理系统上工作,我必须使用PHP代码下载一个php文件而不执行。任何人都可以帮助我
有点像ftp。我添加了上传,编辑和下载文件的选项。它工作正常。但是在下载一个php文件时,它会被执行而不是下载...
我尝试的是:
<?php
$file = $_REQUEST['file_name'];
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
include_once($file);
exit;
}
?>
答案 0 :(得分:21)
您必须加载文件内容,将内容写入请求并设置标题,以便将其解析为强制下载或八位字节流。
例如:
http://server.com/download.php?name=test.php
download.php的内容:
<?php
$filename = $_GET["name"]; //Obviously needs validation
ob_end_clean();
header("Content-Type: application/octet-stream; ");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ". filesize($filename).";");
header("Content-disposition: attachment; filename=" . $filename);
readfile($filename);
die();
?>
此代码无需任何修改即可运行。虽然它需要验证和一些安全功能。
答案 1 :(得分:2)
服务器以某种方式识别应该执行而不是下载的文件。您必须从该处理中排除要下载的.php文件。最简单的可能是将文件重命名为.php.txt。
否则,您应该能够将服务器配置为不处理该特定文件,或者它所在的路径。如何执行此操作取决于您正在运行的服务器。
答案 2 :(得分:1)
如果此类php文件位于同一服务器/网站上,则只需将其作为普通文件打开,例如$fileContents = file_get_contents($filename);
如果文件位于其他服务器上,则您的可能选项很少:
1)通过FTP访问它(如果您有登录详细信息和访问权限)
2)在该服务器上有特殊的URL重写规则,该规则将指示Web服务器以纯文本形式发送文件而不是执行它(例如somefile.php.txt
)
3)在该服务器上安装特殊脚本,并通过传递文件名作为参数,它将返回该文件的内容(例如http://example.com/showfile.php?file=somefile.php
)
答案 3 :(得分:1)
这是如何下载php文件而不是执行它。
相信我它有效! ..下载文件php有自己的风险:)
<?php
function downloadThatPhp($nameOfTheFile)
{
header("Pragma: public");
header("Expires: 0"); // set expiration time
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/text/x-vCard");
header("Content-Disposition: attachment; filename=".basename($nameOfTheFile).";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($nameOfTheFile));
@readfile($nameOfTheFile);
exit(0);
}
// and this how to use:
// download that php file with your own risk :)
$file = $_REQUEST['file_name'];
$downloadThis = "http://domain-name.com/".$file;
if (file_exists($file)) {
downloadThatPhp($downloadThis);
}
?>
希望这可以帮助你兄弟:)
答案 4 :(得分:0)
您可以在php.net/header上阅读很多相关信息,但要强制下载,您可以使用强制下载标头。 This comment is amazing,看看吧! : - )
答案 5 :(得分:0)
如果有人希望在其.htaccess文件中执行此操作:
Header set Content-Disposition attachment
AddType application/octet-stream .php
或
<FilesMatch "\.(?i:php)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>