我正在尝试刷新PHP变量

时间:2013-07-06 00:13:43

标签: php javascript jquery

所以我正在为一个客户制作一个网站,而且客户有大量不同频段的照片,他们在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”,它会完美地加载这些图像。

有人可以提供任何帮助/建议吗?我已经在这里待了好几个小时了。谢谢你!

2 个答案:

答案 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);
?>