私はかなり新しいPHPであり、この簡単なダウンロードスクリプトを一緒に文字列にすることができました。ここに記載されている質問のいくつかを読んで、PHPをよく知っている人に聞いてみてください下のコードで、私の実装や変更すべき何かに目立った欠陥があるかどうかを確認してください。単純なファイルのダウンローダー
私の限られたテストの間、すべてがうまくいくように見えましたが、私が言ったように、私はかなり新しいPHPですし、後で道を辿ってスクリプトを壊してしまうかもしれないことを確かめたい。
<?php
//Settings
$filesPath = './files';
$fileName = $_GET['file'];
$allowedExts = array('jpg','png','gif');
//Functions
//Returns the extension portion of a filename.
function file_extension($fileName)
{
$path_info = pathinfo($fileName);
return strtolower($path_info['extension']);
}
//Validation and processing
//Check that a file is actually being requested
if (empty($fileName)) {
die('no file was requested');
}
//Check that the file is allowed to be downloaded
if (!in_array(file_extension($fileName), $allowedExts)) {
die('you cannot download this file');
}
//Get the file
if (file_exists($filesPath . DIRECTORY_SEPARATOR . $fileName)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($fileName));
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($fileName));
ob_clean();
flush();
readfile($fileName);
exit;
}
?>
TIA、 デイブ
ないセキュリティ関連から保護する方法についていくつかのチェックを行いますが、あなたが持つべき 所有、ハッカーの攻撃に開いていますあなたのダウンロードを途中で中断したくない場合は、 'set_time_limit(0);'を参照してください。http://php.net/manual/en/function.set-time-limit.php – Ben
ありがとうございました。設定、私のホストはそれを賞賛するかわからないtho。 –
設定としてではなく、PHPコードの最上部近くに 'set_time_limit(0);'を追加してください – Ben