Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php下载文件不工作,正在下载一个空文件_Php - Fatal编程技术网

php下载文件不工作,正在下载一个空文件

php下载文件不工作,正在下载一个空文件,php,Php,我正在列出子目录中的文件并试图下载它们。下面是我的脚本。下载弹出窗口出现,但显示0大小并下载空文件。但是,当我将$directory设置为root而不是sub-directory文件夹时,下载可以工作并保存包含内容的文件。请帮助,我如何通过将$directory设置为subdirectory来下载带有以下脚本的文件 index.php $directory = "folder"; //this is my sub directory $images = scandir($directory)

我正在列出子目录中的文件并试图下载它们。下面是我的脚本。下载弹出窗口出现,但显示0大小并下载空文件。但是,当我将$directory设置为root而不是sub-directory文件夹时,下载可以工作并保存包含内容的文件。请帮助,我如何通过将$directory设置为subdirectory来下载带有以下脚本的文件

index.php

$directory  = "folder";  //this is my sub directory
$images = scandir($directory);
$ignore = Array(".", "..");
$count=1;
echo '<table border=1>';
foreach($images as $dispimage){
    if(!in_array($dispimage, $ignore)){
    echo "<tr id='del$count'>
    <td>$count</td>
    <td>$dispimage</td>     

    <td><a href=\"browserProcess.php?file=$dispimage\">Download</a>

    </tr>";
    $count++;
    }
}
echo '</table>';

@Marc B的评论是正确的。您允许用户下载服务器上的任何文件

下载的文件总是空的原因是browserProcess.php在错误的目录中查找。在index.php中扫描“./folder”目录,而browserProcess.php在“./”而不是“./folder”中查找文件


如果您使用此脚本来了解文件操作以及如何为下载文件提供服务,那么也可以,只要您知道这不是可以投入生产或项目的代码,因为它包含巨大的安全漏洞。

不要使用此代码。您允许用户在您的服务器上下载他们知道路径名的任何文件。这是非常危险的。如果您想让自己打开以进行完整的数据提取,请改用readfilefolder/$file。@MarcB谢谢。子目录不是静态文件夹名称,权限级别因用户而异。我试图动态设置它,就像这个readfileadmin/userDirectories/$user\u id/$file;但是它不起作用,如果我静态地使用子目录文件夹名而不是$user_id,它就起作用了,但是我想动态地使用子目录。你能帮忙吗?
  if ($_GET['file']){
  $file = $_GET['file'];
  header('Content-Description: File Transfer');
  header('Content-Type: application/octet-stream');
  header('Content-Disposition: attachment; filename='.basename($file));
  header('Expires: 0');
  header('Cache-Control: must-revalidate');
  header('Pragma: public');
  header('Content-Length: ' . filesize($file));
  ob_clean();
  flush();
  readfile($file);
  exit;
}