Как подключить php файл к php
Перейти к содержимому

Как подключить php файл к php

  • автор:

Подключение одного php файла в другой

Программисты не пишут код в одном файле, а разбивают проект на десятки файлов и папок. Без этого нельзя обойтись, если хотите ориентироваться в проекте. Если у нас будет 1 файл на 100000 строк кода, то работать с ним будет затруднительно.
Один php файл, можно подключить в другой, например так:

include('путь к файлу');

Путь к файлу может быть как абсолютным, так и относительным (http://phpfaq.ru/newbie/paths). Но все таки указывать абсолютный путь, это более правильный подход. Так мы можем быть уверены, что подключится именно тот файл, который нам нужен, вне зависимости от точки входа.

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

// получаем путь до директории $path = dirname(__FILE__); // подключаем другой php файл, который в ней лежит include($path . '/file.php');

Подробности о функции include прочитайте в документации (это обязательно): http://php.net/manual/ru/function.include.php

У функции имеются братья. Такие как include_once, require, require_once.

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

В свою очередь постфикс _once означает, что несмотря на то, сколько раз вы попытаетесь подключить файл, он подключится только 1 раз.

Теперь обратите внимание, что организовывать код проекта, при помощи include и require — неправильный подход. Он был хорош 20 лет назад, когда лучше просто не умели.

Правильным было бы организовать проект так, чтобы у вас не было необходимости подключать необходимый код вручную, при помощи приведенных выше функций. Сделать это можно при помощи функции spl-autoload (http://php.net/manual/ru/function.spl-autoload.php).

С помощью функции autoload, вы сможете сделать так, чтобы когда вы пишите название класса например:

$v = new MyClass();

То автоматически, если этого еще не сделано, подключался некий файл, в котором и содержится описание данного класса, а об использовании, для этих целей include, require можно просто забыть.

Приведу простой пример того, как можно сделать автозагрузку классов.

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

spl_autoload_register(function($class)< echo $class; die(); >); $test = new Abracadabra();

В данном случае, мы пытаемся создать экземпляр несуществующего класса Abracadabra .
С помощью spl_autoload_register определили функцию, которая будет разбираться с этой ситуацией. В переменной $class оказалось название класса, который мы вызываем.
Сейчас мы просто печатаем название класса при помощи echo , и нам выведется текст: «Abracadabra».

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

$test = new MyNamespace\Abracadabra(); // выведет MyNamespace\Abracadabra

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

Она будет выглядеть следующим образом:

spl_autoload_register(function($class)< require __DIR__ . '/src/' . $class . '.php'; >);

Это очень простой пример, который вы не захотите использовать в настоящих проектах.

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

Некоторые также придумывают свои велосипеды.

Также существует composer, в котором, при помощи autoload, организована автозагрузка многочисленных расширений.

Свежие записи

  • SQL UPDATE: примеры обновления строк в таблице
  • PHP: substr и мощные альтернативы, чтобы вырезать часть строки
  • Степень в C, C++ и С#: как возвести число в любую степень, побитовые операции
  • Скачать ShowKeyPlus: ссылка на последнюю официальную версию, скачивание, установка
  • Как создать файл в Linux: 12 способов
  • SQL INSERT INTO: примеры вставки строк в таблицу БД MySQL
  • PHP: str_replace — замена или удаление подстроки в строке
  • Функция date() в php: распространенные форматы, примеры, советы
  • cURL в PHP: примеры POST, GET запросов с headers, cookie, JSON и многопоточностью
  • JSON в PHP: примеры json_encode, json_decode, работа с кириллицей и utf-8
  • Файл gitignore — примеры и документация
  • Сортировка массивов в php: ksort, asort и прочие sort’ы
  • jQuery onclick: как выполнить код при клике на кнопку
  • 500 Internal Server Error — в чем причина?
  • SMTP от Yandex: как отправить письма из PHP — пример настроек
  • No such file or directory — в чем причина?
  • Как получить первый элемент массива в php
  • Cтроку в массив по разделителю в PHP: explode, str_split, strtok — что выбрать?
  • 301 редирект на https с www через htaccess
  • Как в php добавить к массиву другой массив?
  • 301 редирект на https без www с помощью htaccess
  • Регулярные выражения в PHP
  • PHP json_decode — как декодировать результат в массив?
  • Yii2 ActiveRecord шпаргалка по составлению запросов
  • Поиск подстроки в строке с помощью PHP
  • Отправка почты на php
  • Как подключить php код в html
  • Конвертировать массив в строку при помощи PHP
  • Подключение одного php файла в другой
  • Подборка ссылок для веб-разработчика
  • Проблема с кириллицей в PHPWord

Как подключить php файл к php

I think the way an array of attachments works is kind of cumbersome. Usually the PHP guys are right on the money, but this is just counter-intuitive. It should have been more like:

Array
(
[0] => Array
(
[name] => facepalm.jpg
[type] => image/jpeg
[tmp_name] => /tmp/phpn3FmFr
[error] => 0
[size] => 15476
)

Anyways, here is a fuller example than the sparce one in the documentation above:

foreach ( $_FILES [ «attachment» ][ «error» ] as $key => $error )
$tmp_name = $_FILES [ «attachment» ][ «tmp_name» ][ $key ];
if (! $tmp_name ) continue;

$name = basename ( $_FILES [ «attachment» ][ «name» ][ $key ]);

if ( $error == UPLOAD_ERR_OK )
if ( move_uploaded_file ( $tmp_name , «/tmp/» . $name ) )
$uploaded_array [] .= «Uploaded file ‘» . $name . «‘.
\n» ;
else
$errormsg .= «Could not move uploaded file ‘» . $tmp_name . «‘ to ‘» . $name . «‘
\n» ;
>
else $errormsg .= «Upload error. [» . $error . «] on file ‘» . $name . «‘
\n» ;
>
?>

7 years ago

Do not use Coreywelch or Daevid’s way, because their methods can handle only within two-dimensional structure. $_FILES can consist of any hierarchy, such as 3d or 4d structure.

The following example form breaks their codes:

As the solution, you should use PSR-7 based zendframework/zend-diactoros.

use Psr\Http\Message\UploadedFileInterface ;
use Zend\Diactoros\ServerRequestFactory ;

$request = ServerRequestFactory :: fromGlobals ();

if ( $request -> getMethod () !== ‘POST’ ) http_response_code ( 405 );
exit( ‘Use POST method.’ );
>

$uploaded_files = $request -> getUploadedFiles ();

if (
!isset( $uploaded_files [ ‘files’ ][ ‘x’ ][ ‘y’ ][ ‘z’ ]) ||
! $uploaded_files [ ‘files’ ][ ‘x’ ][ ‘y’ ][ ‘z’ ] instanceof UploadedFileInterface
) http_response_code ( 400 );
exit( ‘Invalid request body.’ );
>

$file = $uploaded_files [ ‘files’ ][ ‘x’ ][ ‘y’ ][ ‘z’ ];

if ( $file -> getError () !== UPLOAD_ERR_OK ) http_response_code ( 400 );
exit( ‘File uploading failed.’ );
>

$file -> moveTo ( ‘/path/to/new/file’ );

8 years ago

The documentation doesn’t have any details about how the HTML array feature formats the $_FILES array.

Example $_FILES array:

For single file —

Array
(
[document] => Array
(
[name] => sample-file.doc
[type] => application/msword
[tmp_name] => /tmp/path/phpVGCDAJ
[error] => 0
[size] => 0
)
)

Multi-files with HTML array feature —

Array
(
[documents] => Array
(
[name] => Array
(
[0] => sample-file.doc
[1] => sample-file.doc
)

[type] => Array
(
[0] => application/msword
[1] => application/msword
)

[tmp_name] => Array
(
[0] => /tmp/path/phpVGCDAJ
[1] => /tmp/path/phpVGCDAJ
)

The problem occurs when you have a form that uses both single file and HTML array feature. The array isn’t normalized and tends to make coding for it really sloppy. I have included a nice method to normalize the $_FILES array.

function normalize_files_array ( $files = [])

foreach( $files as $index => $file )

if (! is_array ( $file [ ‘name’ ])) $normalized_array [ $index ][] = $file ;
continue;
>

foreach( $file [ ‘name’ ] as $idx => $name ) $normalized_array [ $index ][ $idx ] = [
‘name’ => $name ,
‘type’ => $file [ ‘type’ ][ $idx ],
‘tmp_name’ => $file [ ‘tmp_name’ ][ $idx ],
‘error’ => $file [ ‘error’ ][ $idx ],
‘size’ => $file [ ‘size’ ][ $idx ]
];
>

?>

The following is the output from the above method.

Array
(
[document] => Array
(
[0] => Array
(
[name] => sample-file.doc
[type] => application/msword
[tmp_name] => /tmp/path/phpVGCDAJ
[error] => 0
[size] => 0
)

[documents] => Array
(
[0] => Array
(
[name] => sample-file.doc
[type] => application/msword
[tmp_name] => /tmp/path/phpVGCDAJ
[error] => 0
[size] => 0
)

[1] => Array
(
[name] => sample-file.doc
[type] => application/msword
[tmp_name] => /tmp/path/phpVGCDAJ
[error] => 0
[size] => 0
)

Можно ли подключить php файл к файлу темы function.php на wordpess?

У меня есть код написанный в function.php
Но он очень длинный что слегка неудобно.
И я бы хотел некоторую часть кода подключить отдельным файлом php.
И меня интересую насколько правильно будет подключить его отдельным файлом
Скажется ли это на производительности. Или на некоторых хуках и функциях.
Или все же лучше хранить его одним файлом в function.php.
А также каким способом лучше всего его подключить к function
get_template_part подойдет для этого или нет есть другой специальный хук.

  • Вопрос задан более трёх лет назад
  • 1808 просмотров

Комментировать

Решения вопроса 1

pton

Вынести можно.
Подключать надо через функцию require_once

// при условии что новый файл будет рядом с Вашим functions.php // или с тем к которому подключаете // НазваниеВашегоФайла - заменить на реальное название require_once( dirname(__FILE__) . '/НазваниеВашегоФайла.php');

Скажется ли это на производительности. Или на некоторых хуках и функциях.

Ответ написан более трёх лет назад

Как подключить php файл к php

Файлы сайта

Принципиальной разницы между этими двумя инструкциями Вам обнаружить не удастся при всем желании, но нюансы присутствуют: В случае возникновения ошибки во время выполнения команды require парсер получит ответ fatal error и произойдет остановка выполнения кода страницы, в то время как include выдаст лишь warning и выполнение файла продолжится (просто не произойдет подключение файла). Давайте для лучшего понимания темы разберем простейший пример. У нас есть наш минисайт в котором хедер и футер одинаковые на всех страницах, а тело документа меняется. Создаем файлы header.php и footer.php в которые помещаем код, который будет на всех страницах одинаковым, а в файлах index.php и newpage.php выполним подключение статичных частей. В итоге получаем: Содержимое header.php

header> nav> a href="newpage1.php" title="пункт меню">пункт менюa> a href="newpage2.php" title="пункт меню">пункт менюa> a href="newpage3.php" title="пункт меню">пункт менюa> nav> header>

Содержимое footer.php

footer> p>Сделано намиp> footer>

Содержимое прочих страниц сайта

   Минисайт   require "header.php"; ?> 

Много-много полезной информации

include "footer.php"; ?>

Страница после загрузки сайта

В результате загрузки нашей страницы получаем следующую картину: Как мы видим, все прекрасно работает. Обращу внимание, что пример мы запускали на локальном сервере Denwer, поскольку для работы PHP необходимо наличие сервера с его поддержкой. Если создавать сайт в простой папке на ПК ничего работать не будет. В рассмотренном примере мы использовали для подключение хедера require, а футера include. Чем пользоваться на своих сайтах — решать Вам. Как уже говорилось особой разницы между ними нет. Разве что require считается несколько более строгой инструкцией. По факту строка попросту копирует все содержимое файла, путь к которому мы указываем, внутрь документа в котором находится.

Использование include _once и require _once

При работе над сайтом могут возникнуть проблемы связанные с тем, что один и тот же участок кода подключен в один файл неоднократно. Предположим это произошло из-за того, что над сайтом работали несколько человек, и когда произошло объединение кодов, то вышел вот такой казус… Чтобы исключить возможность появления подобных проблем разработчики часто используют инструкции include _once и require _once. Принцип действия у них точно такой же как и у include с require, но если файл в такой инструкции уже был подключен к нашему, то повторного подключения не произойдет. К недостаткам данного метода можно отнести то, что он работает медленее и с большими затратами вычислительных ресурсов, чем его предшественники include с require, поскольку возникает необходимость запоминать все подключенные файлы и сравнивать их, для избежания дублирования кода.

На заметку

  • Чтобы было удобнее различать файлы страниц сайта и файлы их фрагментов, которые мы в них подключаем обычно подключаемым файлам добавляют частичку inc в название. Рассматривая данный подход на нашем примере мы бы из файла header.php получили файл header.inc.php ну и тд. Такой подход способен на порядок упростить понимание структуры сайта в будущем.
  • Код из файла, который мы подключаем, наследует область видимости строки в которой он подключается. Тобишь просто внутри страницы он будет обладать глобальной областью, а внутри функции- локальной.
  • Мы можем использовать include с require где нам угодно. Даже внутри скриптов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *