0

私はクライアントのためにウェブサイトを作っています.クライアントは80年代と90年代に撮影したさまざまなバンドの写真をたくさん持っていて、それらを試して販売したいと考えています.

以前のサイトのように各バンド (100 以上あります) ごとにページを作成する代わりに、Javascript/PHP を使用して、そのバンドのテキストがクリックされたときに画像ディレクトリをそのバンドに変更する 1 つのページを作成しようとしています。

これまでのところ、PHP 関数を使用してスライド ショー フォルダー内の写真を検索することはできますが、この関数を更新してスライド ショー フォルダー内のサブ ディレクトリを検索することはできませんでした。(たとえば、「メタリカ」をクリックすると、#imageGal が空になり、メタリカ フォルダからギャラリーにすべての新しいメタリカ イメージを追加したいと思います)。

私の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」と入力すると、それらの画像が完全に読み込まれます。

誰でもヘルプ/アドバイスを提供できますか? 私はこれに何時間も取り組んできました。何から何までありがとう!

4

2 に答える 2

2

私は ajax の専門家ではありませんが、imageDir を投稿しているようです。

したがって、PHP コードは $_POST['imageDir'] を探す必要があります。

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

これで解決しますか?

于 2013-07-06T00:21:21.827 に答える
2

オンになっていない限り、グローバル配列register_globalsを介して変数を参照する必要があります。の代わりに。$_POST$_POST['imagesDir']$imagesDir

ただし、現在の形式では、誰かがコードを悪用してサーバー上のディレクトリを一覧表示しようとする可能性があるため、単純に置き換えるのは非常に悪い考えであると述べています。

悪用を防ぐために、親ディレクトリを追加する必要があります。このようなもの:

chdir()グロブが機能する前にパスに編集する必要があります。以下のコードを更新しました。

<?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);
?>
于 2013-07-06T00:21:59.860 に答える