我正在尝试刷新 PHP 变量

I'm trying to make a PHP variable refresh

本文关键字:刷新 PHP 变量      更新时间:2023-09-26

所以我正在为客户制作一个网站,客户有大量他们在 80 年代和 90 年代拍摄的不同乐队的照片,他们想尝试出售。

我没有像以前的网站那样为每个乐队(超过 100 个(制作一个页面,而是尝试制作一个页面,使用 Javascript/PHP 在单击该乐队的文本时将图像目录更改为该频段。

到目前为止,我可以使用PHP函数在幻灯片文件夹中查找照片,但是我一直无法更新此功能以搜索幻灯片文件夹中的子目录。(例如,当单击"Metallica"时,我清空 #imageGal,然后我想将所有新的metallica图像从metallica文件夹附加到图库中(。

我的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.');   
    }
}); 

当用户单击乐队(即金属乐队(时,将执行此代码。

$('.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",它会完美地加载这些图像。

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

除非你打开了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);
?>

我不是 ajax 专家,但您似乎正在发布 imageDir。

所以你的PHP代码应该寻找$_POST['imageDir']。

<?php
    $imagesDir = $_POST['imageDir'];
    $images = glob($imagesDir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE);
    echo json_encode($images);
?>

这能解决吗?