所以我正在为一个客户制作一个网站,而且客户有大量不同频段的照片,他们在80年代和90年代拍摄了他们想要尝试和销售的照片。
我没有像上一个网站那样为每个乐队(超过100个)制作一个页面,而是在点击该乐队的文本时,尝试使用Javascript / PHP将图像目录更改为该乐队。
到目前为止,我可以使用PHP函数在幻灯片文件夹中查找照片,但我无法更新此功能以搜索幻灯片文件夹中的子目录。 (例如,当点击'Metallica'时,我清空#imageGal,然后我想将metallica文件夹中的所有新metala图像附加到图库中。)
我的PHP代码是:
<?php
$imagesDir = '';
$images = glob($imagesDir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE);
echo json_encode($images);
?>
这个PHP代码看起来效果很好。
我使用这个JQuery代码获取图像:
$('#imageGal').empty();
$.ajax({
url: "slideshow/getimages.php",
dataType: 'json',
success: function(json){
for(var i=0;i<json.length;i++){
$('#imageGal').append('<img src="slideshow/' + json[i] + '">');
}
}, failure: function(json){
alert('Something went wrong. Please try again.');
}
});
当用户点击某个频段(即Metallica)时,将执行此代码。
$('.options').mousedown(function() {
var name = $(this).attr('id');
//$('#output').html(name);
$.ajax({
type: "POST",
url: "slideshow/getimages.php",
data: {
imageDir: name
}, success: function(msg){
alert( "Data Saved: " + msg );
}
});
$('#imageGal').empty();
$.ajax({
url: "slideshow/getimages.php",
dataType: 'json',
success: function(json){
for(var i=0;i<json.length;i++){
$('#imageGal').append('<img src="slideshow/' + json[i] + '">');
}
}, failure: function(json){
alert('Something went wrong. Please try again.');
}
});
});
我无法更改$ imagesDir变量,但是如果我在$ imagesDir =“Metallica”变量中手动输入“Metallica”,它会完美地加载这些图像。
有人可以提供任何帮助/建议吗?我已经在这里待了好几个小时了。谢谢你!
答案 0 :(得分:2)
我不是ajax专家,但你似乎在发布imageDir。
所以你的PHP代码应该寻找$ _POST ['imageDir']。
<?php
$imagesDir = $_POST['imageDir'];
$images = glob($imagesDir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE);
echo json_encode($images);
?>
这解决了吗?
答案 1 :(得分:2)
除非你有register_globals
,否则你需要通过全局$_POST
数组引用变量。 $_POST['imagesDir']
代替$imagesDir
。
但是我会说它的当前形式是简单地替换它是一个非常糟糕的主意,因为有人可能试图利用你的代码来列出服务器上的任何目录。
您应该附加父目录以防止漏洞利用。像这样:
编辑你需要chdir()
到glob之前的路径才能工作。我在下面更新了我的代码。
<?php
$imagesDir = $_SERVER['DOCUMENT_ROOT']; // this is the root of your web directory
$images = array();
// and this line ensures that the variable is set and no one can backtrack to some other
// directory
if( isset($_POST['imagesDir']) && strpos($_POST['imagesDir'], "..") === false) {
$imagesDir .= "/" . $_POST['imagesDir'];
chdir($imagesDir);
$images = glob('*.{jpg,jpeg,png,gif}', GLOB_BRACE);
}
echo json_encode($images);
?>