PHP относительные и абсолютные пути

Это происходило со мной и при запуске $ _POST в MAMP. Все мои файлы .ini и httpd были настроены правильно. Если вы выполняете обработку формы, и у вас есть html-документ и размещаете информацию в обработчике php form, работающем под $ POST, убедитесь, что вы запускаете html-файл с localhost через ваш сервер, а не только локально.

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

Неверно: file:///Applications/MAMP/htdocs/form/form.html

Вправо: http://localhost:your port number/form/form.html

Теперь php следует обработать, как только вы нажмете кнопку отправки

13
задан Sankar V 19 March 2015 в 13:30
поделиться

7 ответов

Обычно я устанавливаю константу вручную или так:

define('ROOT', dirname(__FILE__));

Затем делаю

require ROOT . '/include/file.php';
16
ответ дан 1 December 2019 в 19:07
поделиться

Определенно не программируйте пути жестко, как вариант второй. Хорошая альтернатива:

define('BASE_DIR', '/home/ftpuser/public_html/includes');
include(BASE_DIR . '/myscript.php');
include(BASE_DIR . '/myscript2.php');
include(BASE_DIR . '/myscript3.php');
include(BASE_DIR . '/myscript4.php');

Учитывая, что у вас, вероятно, будет где-то от 5 до 50 включений (я предполагаю), я бы особо не беспокоился об этом. Просто идите относительными путями. Разницы во времени включения даже не будет заметно. Если вы разрабатываете большое веб-приложение и их будет сотни, это может быть другая история ...

3
ответ дан 1 December 2019 в 19:07
поделиться

Я обычно настраиваю свои подключаемые каталоги / библиотеки, устанавливая путь включения при инициализации моего приложения.

set_include_path("/home/ftpuser/public_html/includes");
include("myscript.php");

Фреймворк zend делает нечто подобное для загрузки библиотечных классов.

2
ответ дан 1 December 2019 в 19:07
поделиться

The most important thing is to arrange the include paths so that the largest amount of require/include-calls are trapped in the first mentioned path when not including a file via an absolute path in the first place.

Relying on including everything via an absolute path is hard to maintain because changing the path of your library means individually changing all those files refering to it instead of changing the include path in one place.

1
ответ дан 1 December 2019 в 19:07
поделиться

Было бы хорошо, если бы вы протестировали все методы, проверив время, необходимое для выполнения каждого, лично я никогда не беспокоился об этом и просто использовал относительные пути.

Я полагаю, что абсолютные пути будет немного быстрее, возможно, стоит задаться вопросом, что происходит при ошибке, будет ли он выдавать полный путь к файлу на экран пользователя (очевидно, выключить error_reporting) и вызовет ли это угрозу безопасности?

0
ответ дан 1 December 2019 в 19:07
поделиться

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

можно добавить любое количество включаемых путей, поэтому в редких случаях это может привести к замедлению работы сценария.
Если вы включаете много файлов (например, для инициализации фреймворка), используя абсолютные пути, это может немного ускорить сценарий ...

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

1
ответ дан 1 December 2019 в 19:07
поделиться

Это лучший метод для 99% случаев:

include(dirname(__FILE__)."/includes/myscript.php");

В конечном итоге это абсолютный путь, что означает, что он игнорирует include_path , который является известным источником большого количества связанных ошибок в моем опыте ...

Однако с точки зрения производительности я сомневаюсь, что существует большая разница между абсолютным и относительным путями. Это своего рода микрооптимизация, которая в конечном итоге ничего не значит. Как правило, в include_path будет только 2-3 объекта, если вы не добавите больше. Два обычных виновника - .

8
ответ дан 1 December 2019 в 19:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: