使用PHP检测文件夹中的文件

时间:2012-05-16 14:32:03

标签: php jquery ajax html5

我正在尝试制作一个实现PHP的HTML5幻灯片系统。我的想法开始于创建一个检测文件夹中图像的系统,并将它们放在一个数组中,然后jquery将能够访问该幻灯片中的实现。首先,我有一个php文件,它将检测文件夹中每个文件的名称,并将它们输出为纯文本。

如何将PHP文件名转换为数字数组,而不是以纯文本形式输出,这可以与随后的jquery一起使用?

我打算使用jquery来访问随后创建的数值数组。这是怎么做到的?除非不可能,否则怎么办呢?

目标是能够将文件放在文件夹中,并且脚本能够动态地识别文件的存在,并将它们合并到幻灯片中。然后,这个幻灯片将输出到一个屏幕显示屏,用于等候区,用我们学校的幻灯片展示学校。

这是我到目前为止的代码:

<?php
    //Open images directory
    $dir = opendir("images");
    //List files in images directory
    while (($file = readdir($dir)) !== false)
    {
        echo "filename: " . $file . "<br />";
    }
    closedir($dir);
?>

此时我不知道如何让PHP与Javascript“交谈”。我希望有一些简单的方法,我认为我想要的是AJAX,但我不知道它是如何工作的。

7 个答案:

答案 0 :(得分:5)

这里的答案是使用JSON,这是许多语言支持的Javascript的一个子集,允许您(在许多其他事物中)非常容易地将结构化数据从外部源传递到Javascript中。 PHP有一个函数json_encode(),它允许您将PHP数据结构(通常是数组或对象)转换为Javascript可以轻松读取的格式。 jQuery对JSON也有built-in support

<?php

    // An array of the image file names
    $images = array();

    //Open images directory
    $dir = opendir("images");

    //List files in images directory
    while (($file = readdir($dir)) !== false)
    {
        $images[] = $file;
    }
    closedir($dir);

    echo json_encode($images);

?>

现在,在jQuery中你可以这样做:

$.getJSON('http://url/of/your/script.php', function(images) {
  // In here the variable "images" is an array identical to the one you constructed with PHP
});

答案 1 :(得分:2)

是的,你可以使用ajax通过改变你的php代码来获取图像文件名,如下所示

<?php
    //Open images directory
    $dir = opendir("images");
    $images = array(); 
    //List files in images directory
    while (($file = readdir($dir)) !== false)
    {
        //echo "filename: " . $file . "<br />";
        $images[] = $files;
    }
    closedir($dir);
    echo json_encode($images);
?>

然后使用$.getJSON来获取该列表

    $.getJSON('path_to_above_php_file', function(images) {
       //all your files are in images array, you can loop through it to find individual files
   });

答案 2 :(得分:0)

您可以拥有包含所有图片的数组,然后将此数组转换为JSON。

答案 3 :(得分:0)

为什么不将图像本身写入文档,而不是简单地存储图像的名称?如下所示:

<?php
//Open images directory
$dir = opendir("images");
//List files in images directory
while (($file = readdir($dir)) !== false)
{
    $files[] = YOUR_URL_PATH.$file;
}
closedir($dir);
?>
...
<div id="slideshow">
<?php
foreach($files as $img)
    echo '<img class="slide" src="'.$img.'" />';
?>
</div>
...
<script type="text/javascript">
$(document).ready(function()
{
    alert($(".slide").length+" slides detected");
});
</script>

这样,你不是依靠PHP来定义你的jQuery,而是使用PHP来定义jQuery需要的元素才能正常运行。

<强>更新

如果您的PHP和Javascript存在于同一页面上,并且您仍然希望能够使用PHP设置Javascript数组,那么我认为这就是您所需要的:

<?php
//Open images directory
$dir = opendir("images");
//List files in images directory
while (($file = readdir($dir)) !== false)
{
    $files[] = YOUR_URL_PATH.$file;
}
closedir($dir);
?>
...
<script type="text/javascript">
$(document).ready(function()
{
    var fileArr = [<?php echo implode(',',$files); ?>];
});
</script>

这要求您的Javascript与定义文件数组的PHP位于同一页面上。如果您的Javascript旨在从外部引用,那么您最好的选择是使用JSON数组,如此处的许多其他答案所述。

答案 4 :(得分:0)

我会说JSON很适合你的情况。只需创建打印(echo)包含文件列表的JSON对象的PHP文件即可。您可以使用json_encode()来创建JSON对象。在浏览器端,你可以发出一个AJAX请求(或者只是使用jQuery.getJSON())并将数据类型设置为JSON,你应该很高兴:

$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

Here您可以阅读有关在PHP中使用JSON的信息。

答案 5 :(得分:0)

有几种方法可以做到这一点,快速简便的方法是:

你的php:

$dir = opendir("images");
$store = array();
while (($file = readdir($dir)) !== false)
{
    $store[] = $file;
}
closedir($dir);

现在你有一个所有文件的数组(我可能会补充一点,你可能想要验证文件是图像!)。我喜欢将它们作为json字符串转储到JS中,因为它可以节省我的麻烦。这样:

echo "<script> var allimages = jQuery.parseJSON('".addslashes(json_encode($store))."'); </script>";

现在,如果您console.log() allimages变量,您将看到所有图像都在其中,因此如果您愿意,可以使用“$ .each”或类似物。

答案 6 :(得分:0)

SPL库具有处理目录的功能

来自PHP网站:

用法示例: 要查看所有文件:

<?php
   $ite=new RecursiveDirectoryIterator($_POST['path']);

   $files = array();
   foreach (new RecursiveIteratorIterator($ite) as $filename=>$cur) {
       array_push($files, $filename);
   }
   echo json_encode($files);
?>

现在使用jquery.post()可以检索文件夹中的文件列表。