我正在尝试制作一个实现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,但我不知道它是如何工作的。
答案 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()可以检索文件夹中的文件列表。