Intereting Posts
Добавить новый столбец в существующую таблицу в MySql, используя PHP с PDO Заявление PHP Должно возвращать несколько объектов, но возвращает только один Не удалось удалить из базы данных с помощью php PHP MySQL – раз в неделю PHP: Итерация по нескольким массивам и построение запроса SQL INSERT PDO MySQL fetchAll (), используя удвоенную необходимую память в результате? проверьте, содержит ли строка (CR, LF или CF или LF) или не использует PHP добавить несколько данных в xml-файл с помощью PHP xmlwriter Получение имени файла в PHP file_get_html странный вывод Как проверить, может ли каталог записываться в PHP? php Описание ошибки: Неверное строковое значение: '\ xF4t l' \ xE9 … 'на вставке Запуск php-скрипта в фоновом режиме без завитки Есть ли в Perl динамические переменные типа PHP? Изучение OO-кодирования с помощью PHP, статические! = Выражения, но в руководстве PHP говорится, что все, что имеет значение, является выражением, смущенным

include_once, относительный путь в php

У меня есть 3 файла: home, failed_attempt, login.

Файл home и failed_attempt относятся к файлу входа в систему.

Досадно, что они ошибаются, заявив, что файл входа не существует. home будет генерировать исключение, если я это сделаю, но failed_attempt не будет.

include_once("../StoredProcedure/connect.php"); 

include_once ( "../ без названия / sanitize_string.php");

и если я это сделаю:

  include_once("StoredProcedure/connect.php"); include_once("untitled/sanitize_string.php"); 

происходит противоположное, fail_attempt выдает исключение, но дома, привычно. Как это исправить..

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

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

Структура каталога:

 PoliticalForum ->home.php ->StoredProcedure/connect.php ->untitled/sanitize_string.php ->And other irrelevant files 

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

1: chdir в правильный каталог

 <?php // check if the 'StoredProcedure' folder exists in the current directory // while it doesn't exist in the current directory, move current // directory up one level. // // This while loop will keep moving up the directory tree until the // current directory contains the 'StoredProcedure' folder. // while (! file_exists('StoredProcedure') ) chdir('..'); include_once "StoredProcedure/connect.php"; // ... ?> 

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

2: Используйте абсолютные пути

Теперь, прежде чем вы скажете, что это не переносимо, на самом деле это зависит от того, как вы его реализуете. Вот пример, который работает с Apache:

 <?php include_once $_SERVER['DOCUMENT_ROOT'] . "/StoredProcedure/connect.php"; // ... ?> 

В качестве альтернативы, снова с apache, добавьте следующее в свой .htaccess в корневой каталог:

 php_value auto_prepend_file /path/to/example.php 

Тогда в example.php:

 <?php define('MY_DOC_ROOT', '/path/to/docroot'); ?> 

И, наконец, в ваших файлах:

 <?php include_once MY_DOC_ROOT . "/StoredProcedure/connect.php"; // ... ?> 

3: Установить PHP include_path

См. Руководство для директивы include_path . Если у вас нет доступа к php.ini, это можно установить в .htaccess, если вы используете Apache, а PHP не установлен как CGI, например:

 php_value include_path '/path/to/my/includes/folder:/path/to/another/includes/folder' 

Такие вещи, как realpath() и __DIR__ являются вашими друзьями, когда дело доходит до создания путей в PHP.

Realpath http://php.net/manual/en/function.realpath.php

Магические константы http://php.net/manual/en/language.constants.predefined.php

Поскольку include и require – это языковые конструкции (а не функции), они не нуждаются в скобках. Вообще говоря, вы должны include чтобы включить «шаблоны» (выходные файлы) и require включения файлов PHP, таких как классы.

Таким образом, вы можете использовать что-то вроде:

 $sPath = realpath( __DIR__ . '../relative/path/here'); if($sPath) { require_once $sPath; } 

(используйте dirname(__FILE__) вместо dirname(__FILE__) на PHP <5)

Стоит оценить путь, прежде чем пытаться потребовать файл, поскольку realpath() возвращает false, если файл не существует и пытается require false; выдает ошибку PHP.

В качестве альтернативы вы можете просто использовать абсолютные пути, такие как:

require /home/www/mysite.com/htdocs/inc/somefile.php

Для новичков это поможет понять. Используйте только следующее, основанное на вашем относительном пути:

 //include file directly from parent directory: include_once(dirname(__FILE__) . '/../connect.php'); 

ИЛИ

 //include file from parent's child directory: include_once(dirname(__FILE__) . '/../StoredProcedure/connect.php'); 

ИЛИ

 //include file from own child directory: include_once('StoredProcedure/connect.php'); 

ИЛИ

 //include sibling files from same directory: include_once('connect.php'); 

Сделайте что-то вроде require(dirname(__FILE__) . '[RELATIVE PATH HERE]');

Другие ребята правильно ответили на ваш вопрос, однако я думал, что внес что-то еще: автозагрузчики.

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

Документация здесь и может объяснить это лучше, чем я могу: http://php.net/manual/en/language.oop5.autoload.php

Поистине рекомендую использовать их, сэкономит вам время и станет лучшей практикой.