2013-07-06 3 views
0

Итак, я создаю веб-сайт для клиента, и у клиента есть множество фотографий из тонны различных групп, сфотографированных ими в 80-х и 90-х годах, которые они хотели бы попробовать и продать.Я пытаюсь обновить переменную PHP

Вместо того, чтобы сделать страницу для каждой группы (более 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.'); 
    } 
}); 

Когда пользователь нажимает на группы (т.е. 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 изменять, но если я вручную ввести «Metallica» в $ imagesDir = переменная «Metallica», он загружает эти изображения прекрасно.

Может ли кто-нибудь предложить какую-либо помощь/совет? Я занимаюсь этим уже много часов. Спасибо за все!

ответ

2

Если у вас нет register_globals, тогда вам необходимо обратиться к переменной через глобальный массив $_POST. $_POST['imagesDir'] вместо $imagesDir.

Однако я бы сказал, что в его нынешней форме было бы очень плохой идеей просто заменить его, поскольку кто-то может попытаться использовать ваш код, чтобы перечислить любой каталог на сервере.

Вы должны добавить родительский каталог, чтобы предотвратить эксплойт. Что-то вроде этого:

EDIT у вас должно быть 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); 
?> 
+0

Это действительно помогает! Спасибо за подсказку об эксплойте! Итак, я получаю $ imagesDir, чтобы прочитать правильный путь к моему файлу, но моя функция glob не работает. Какие-нибудь советы? Когда я повторяю $ imagesDir, я получаю правильный путь. – edeutsch

+0

Ошибка в моем коде. Чтобы glob() работал, он должен быть на правильном пути. используйте 'chdir()' для изменения пути, затем вызовите 'glob()'. Я отредактировал свой код, чтобы отразить это. – Cfreak

+0

Спасибо! У меня все работает отлично! – edeutsch

2

Я не эксперт по ajax, но вы, кажется, отправляете изображение.

Итак, ваш PHP-код должен искать $ _POST ['imageDir'].

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

Решает ли это решение?

Смежные вопросы