Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.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/jQuery列出文件夹中的所有文件 上下文_Php_Jquery_Directory_Scandir - Fatal编程技术网

如何使用PHP/jQuery列出文件夹中的所有文件 上下文

如何使用PHP/jQuery列出文件夹中的所有文件 上下文,php,jquery,directory,scandir,Php,Jquery,Directory,Scandir,您好,我想列出一个文件夹中的所有文件,因此我首先考虑使用phpscandir()函数在php中执行此操作,结果如下: 否,除非运行节点服务器 您可以做的是,在html中打印$a或$b,如下所示: <html> <head> <script> var files = <?php echo $a ?> // then do whatever to display it </head> </ht

您好,我想列出一个文件夹中的所有文件,因此我首先考虑使用php
scandir()
函数在php中执行此操作,结果如下:


否,除非运行节点服务器

您可以做的是,在html中打印
$a
$b
,如下所示:

<html>
  <head>
    <script>
      var files = <?php echo $a ?>
      // then do whatever to display it
  </head>
</html>

变量文件=
//然后做任何事情来展示它
我可能无法准确地使用
echo
,欢迎您使用
print
printr
以任何其他方式打印它。
此外,您可能需要额外的工作才能将
$a
打印为正确的js对象,除非您运行node server

您可以做的是,在html中打印
$a
$b
,如下所示:

<html>
  <head>
    <script>
      var files = <?php echo $a ?>
      // then do whatever to display it
  </head>
</html>

变量文件=
//然后做任何事情来展示它
我可能无法准确地使用
echo
,欢迎您使用
print
printr
以任何其他方式打印它。
另外,您可能需要额外的工作才能将
$a
打印为正确的js对象

鉴于您对制作类似Netflix克隆的内容的评论,我建议您制作一个PHP端点,将文件列表导出为JSON。话虽如此,我不建议您构建允许用户输入的文件浏览器,因为在许多情况下,这会使您遭受目录遍历攻击,恶意用户可能会访问您的整个服务器。这可以做得很好,但很棘手

相反,为什么不创建一个包含文件名、类型、路径、关键字、缩略图路径等的数据库呢?然后使用客户端javascript通过ajax向处理数据库访问并完全控制文件访问的PHP脚本发出请求。通过这种方式,当用户单击视频时,您可以调用另一个端点来启动websocket以进行视频流,并且用户不能恶意地在您的服务器中漫游或直接下载/窃取您的视频文件

下面是一个列出服务器中一些文件的示例。为了代码的简单性,我在这里假设jQuery,但您可以使用另一个库或本机XMLHttpRequest对象:

$.ajax({
    url: '/movies/list-all.php',
    method: 'GET',
    dataType: 'json'
}).done(function(data) {
    if (typeof data === 'object' && typeof data !== null) {
        // List the movies
        for(var movie in data.movies) {
            var movieDiv = '<div class="movie-item" data-id="' + movie.id + '">' +
                '<img src="' + movie.thumbnail_path + '"><br>' +
                '<p>' + movie.title + '</p>' +
                '</div>';
            $('#my-container-div').append(movieDiv);
        }
    }
});

影视

鉴于您对制作类似于Netflix克隆的东西的评论,我的建议是制作一个将文件列表导出为JSON的PHP端点。话虽如此,我不建议您构建允许用户输入的文件浏览器,因为在许多情况下,这会使您遭受目录遍历攻击,恶意用户可能会访问您的整个服务器。这可以做得很好,但很棘手

相反,为什么不创建一个包含文件名、类型、路径、关键字、缩略图路径等的数据库呢?然后使用客户端javascript通过ajax向处理数据库访问并完全控制文件访问的PHP脚本发出请求。通过这种方式,当用户单击视频时,您可以调用另一个端点来启动websocket以进行视频流,并且用户不能恶意地在您的服务器中漫游或直接下载/窃取您的视频文件

下面是一个列出服务器中一些文件的示例。为了代码的简单性,我在这里假设jQuery,但您可以使用另一个库或本机XMLHttpRequest对象:

$.ajax({
    url: '/movies/list-all.php',
    method: 'GET',
    dataType: 'json'
}).done(function(data) {
    if (typeof data === 'object' && typeof data !== null) {
        // List the movies
        for(var movie in data.movies) {
            var movieDiv = '<div class="movie-item" data-id="' + movie.id + '">' +
                '<img src="' + movie.thumbnail_path + '"><br>' +
                '<p>' + movie.title + '</p>' +
                '</div>';
            $('#my-container-div').append(movieDiv);
        }
    }
});

影视

浏览器无法读取这样的用户文件。 然而,使用Node和内置的“fs”模块,这是非常容易的(也是常见的)

const { readdirSync } = require('fs');

const PATH_TO_YOUR_FOLDER = '/Users/me/Downloads';

console.log(readdirSync(PATH_TO_YOUR_FOLDER));
// output: array of the file names in my downloads directory
您需要安装节点:

以下是fs文档:

然后将上述代码保存在.js文件中,并使用node(使用终端)运行它:


浏览器不能像那样读取用户的文件。 然而,使用Node和内置的“fs”模块,这是非常容易的(也是常见的)

const { readdirSync } = require('fs');

const PATH_TO_YOUR_FOLDER = '/Users/me/Downloads';

console.log(readdirSync(PATH_TO_YOUR_FOLDER));
// output: array of the file names in my downloads directory
您需要安装节点:

以下是fs文档:

然后将上述代码保存在.js文件中,并使用node(使用终端)运行它:

例1

PHP单独获取文件内容

include 'db.php';// Your DB connection file
$dir = "/images/";
$fi = scandir($dir);
$num_fi = count($fi)-2;
$dh = opendir($dir);
$file = readdir($dh);
$res = "";$i=0;
if (is_dir($dir)){
    if ($dh = opendir($dir)){
        if ($i < $num_fi){

            while (false !== ($file = readdir($dh))){
                 if($file !== "." && $file !== ".." && $file !== ".htaccess" && $file !== "Thumbs.db"){
            $i++;
            echo "<div><iframe src=\"".$dir.$files."\"></iframe><div>" 
            } else {
            echo "<div>No Videos.</div>";
            }
        }
    }   
}
closedir($dh);

示例1

PHP单独获取文件内容

include 'db.php';// Your DB connection file
$dir = "/images/";
$fi = scandir($dir);
$num_fi = count($fi)-2;
$dh = opendir($dir);
$file = readdir($dh);
$res = "";$i=0;
if (is_dir($dir)){
    if ($dh = opendir($dir)){
        if ($i < $num_fi){

            while (false !== ($file = readdir($dh))){
                 if($file !== "." && $file !== ".." && $file !== ".htaccess" && $file !== "Thumbs.db"){
            $i++;
            echo "<div><iframe src=\"".$dir.$files."\"></iframe><div>" 
            } else {
            echo "<div>No Videos.</div>";
            }
        }
    }   
}
closedir($dh);


让本地用户选择对其中任何一个进行clic
——目的是什么?一旦他们点击文件名,会发生什么?其目的是启动一部电影,一种像Netflix一样的东西,你不能,因为Javascript只能通过你的浏览器运行,访问你的系统和文件夹将是一个巨大的安全隐患。如果您希望在本地执行类似的操作,您可以运行node.js服务器(基本上是javascript服务器),您的(php)服务器应该为您的客户端(网站/用js编写)提供某种api来服务这些文件/视频。当然,您也可以使用节点服务器谢谢您的回答,我忘了说,但我的第一个意图只是让它像使用WAMP一样在本地运行,甚至只使用浏览器
,让本地用户可以选择在其中任何一个上使用clic
——目的是什么?一旦他们点击文件名,会发生什么?其目的是启动一部电影,一种像Netflix一样的东西,你不能,因为Javascript只能通过你的浏览器运行,访问你的系统和文件夹将是一个巨大的安全隐患。如果您希望在本地执行类似的操作,您可以运行node.js服务器(基本上是javascript服务器),您的(php)服务器应该为您的客户端(网站/用js编写)提供某种api来服务这些文件/视频。当然,您也可以使用节点服务器谢谢您的回答,我忘了说,但我的第一个意图只是让它像使用WAMP或甚至只有浏览器一样在本地运行OP可能不知道“端点”是什么。但这就是我在评论中试图说的:)+1Ah,在写我的答案时没有看到新的评论。我可以进一步解释,并提供任何OP不清楚的代码示例