Вызов PHP-скрипта для получения URL-адресов изображений

#php #javascript #ajax

#php #javascript #ajax

Вопрос:

Мой путь выглядит следующим образом

/веб-сайт/php
/website/javascript
/website/photographer/index.html
/веб-сайт/фотограф/фотографии

У меня есть javascript, который отображает фотогалерею для фотографий в папке. Используя ajax с jquery, он вызывает PHP-файл, который возвращает URL-адреса изображений в разделе «фотографии», чтобы затем javascript мог настроить галерею и т.д.

Проблема в том, что я не могу заставить PHP получить доступ к папке «photos». Видите ли, у меня есть куча разных страниц photographer, которые делают одно и то же, поэтому я пытаюсь использовать один PHP-файл и один javascript-файл, но в разных каталогах.

Метод, который я разработал, заключался в отправке «window.Расположение.»pathname» в вызове ajax get, чтобы php мог получить каталог, в котором находится текущая страница, а затем просто выполнить поиск в папке «photos» в этом каталоге.

 chdir($_GET["currentPath"] . "photos"); //change the directory so we just get the file names
echo json_encode(glob("*.jpg"));
  

Я получаю эту ошибку:
Предупреждение: chdir() [function.chdir]: нет такого файла или каталога (ошибка 2) в /hermes/bosweb/web054/b541/ipg.danielechevarriacom/testing/oneonethousand_test/php/images.php в строке 4
[]

И когда я

 echo $_GET["currentPath"] . "photos";
  

Выводится: «/testing/oneonethousand_test/steele/photos»

Это правильный каталог, в котором находятся фотографии, поэтому я не знаю, почему это не работает. Я предполагаю, что это связано с тем, как работает chdir.

Я не хочу выполнять chdir («../ steele / photos»), потому что у меня будет много каталогов, и я хочу, чтобы PHP-файл оставался общим. Я просто хочу, чтобы javascript мог указывать php, где находится текущий каталог, а затем PHP переключается на этот каталог. Почему это не работает?

Спасибо.

Комментарии:

1. Судя по ответам, возможно, я ошибаюсь? Как можно предложить организовать мои каталоги без дублирования большого количества кода?

2. Я думаю, что с вашими каталогами все в порядке. На мой взгляд, javascript не нужен для этой галереи. Просто получите список файлов в каталоге фотографий и выведите их с помощью php.

Ответ №1:

Во-первых, НИКОГДА не доверяйте переменным в $_GET / $ _POST / etc. Используя ваш скрипт, я потенциально мог бы перечислить файл в любом каталоге на сервере (включая недоступные через Интернет), а не только те, которые вы хотите.

Это не работает, потому что путь в $ _GET[«currentPath»] — это URL, а не имя папки: оно установлено в «http://danielechevarria.com/testing/oneonethousand_test/steele /» вместо «steele».

Измените переменную, отправляемую JavaScript, на просто путь верхнего уровня (например, «steele») и рассмотрите возможность изменения вашего скрипта на что-то вроде этого:

 //Validate the path somehow, in this case, reject anything that's not alphanumeric
if(!preg_match("/^w $/", $_GET["currentPath"])) die("{'error':'Invalid path'}");
chdir("../" . $_GET["currentPath"] . "/photos");
echo json_encode(glob("*.jpg"));
  

Комментарии:

1. Но я не хочу отправлять «steele», потому что я хочу, чтобы этот скрипт работал для любой страницы фотографа — я не хочу использовать разные javascript для каждого каталога. Я просто хочу, чтобы javascript отправил текущий каталог страницы на php, а затем php получил папку с фотографиями в этом каталоге. «окно. Расположение. pathname» отправляет только полное имя пути.

2. Предполагая только одну глубину для каталогов исполнителей, вы могли бы использовать var currentPath = window.location.pathname.match(/w $/)[0]; на стороне JS

Ответ №2:

для chdir требуется путь к файловой системе, а не http-путь.

Основываясь на выводе команды echo, похоже, что она передает весь http-URL («http://danielechevarria.com/testing/oneonethousand_test/steele/photos «) к функции chdir.

Комментарии:

1. Хорошо, но «окно. Расположение. pathname» отправляет http-путь. Насколько я знаю, не существует функции javascript, которая отправляет текущий путь с произвольным относительным положением… это было бы неплохо.

2. если вы знаете путь docroot, то вы могли бы сгенерировать абсолютный путь в php из пути javascript, который передается ему.

Ответ №3:

Вы можете использовать curl в php для вызова («http://danielechevarria.com/testing / oneonethousand_test/ steele /photos»)

Комментарии:

1. Это кажется намного большим объемом работы, чем необходимо. Почему я не могу просто получить доступ к «/ testing/oneonethousand_test / steele / photos»?

Ответ №4:

Я считаю, что chdir работает только с локальными путями, а не с веб-путями. Итак, для «chdir» в каталог photos вам нужен ПОЛНЫЙ системный путь.

т.е. /home/user/public_html/photos или C:wwwphotos

http://us2.php.net/chdir

Вот мой вклад: Понятия не имею, почему вы используете ajax и javascript для извлечения изображений и создания галереи. Почему бы просто не использовать PHP для создания галереи? Переполнение Javascript усложняет это.

Комментарии:

1. Итак, как мне использовать javascript для отправки текущего относительного пути?

2. Вы этого не делаете. Вы используете php, то, что вы делаете в своем текущем коде, будет работать, но вы используете неправильный путь для доступа к фотографиям. Вероятно, он ищет фотографии в каталоге, подобном этому .. /hermes/bosweb/web054/b541 /ipg.danielechevarriacom/testing/oneonethousand_test/php/ danielechevarria.com/testing/oneonethousand_test/steele/photos .. что смешно

3. Я допустил ошибку. Сейчас он проходит /testing/oneonethousand_test / steele / photos, но я все еще получаю ту же ошибку.

4. Правильно, и то, что вы делаете, пытается изменить каталог на этот точный каталог на вашем сервере. Я предполагаю, что когда вы подключаетесь к компьютеру по ssh и вводите «cd / testing», он сообщает вам, что каталог тестирования не существует.

5. попробуйте использовать getcwd() для построения пути к каталогу для изображений. us2.php.net/getcwd