#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
Вот мой вклад: Понятия не имею, почему вы используете 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