я кодирую следующие
<?php if ($id = mysql_real_escape_string(@$_GET['pid']) && $uid = mysql_real_escape_string(@$_GET['file'])) echo include "foo.php"; else echo include "bar.php"; ?>
Когда я использую функцию include в сочетании с функцией, предназначенной для вывода на страницу (например, или echo include «foo.php»), она возвращает include, но с «1» после содержимого, которое было включено.
echo include "foo.php"
должно быть
include 'foo.php';
Обратите внимание, что это также может произойти при использовании include без эха:
<?= include 'foo.php'; ?>
Это также напечатает возвращаемое значение 1 при использовании внутри скрипта. Чтобы избавиться от этого, вам нужно удалить знак «=» в инструкции так:
<? include 'foo.php'; ?>
PHP теперь распечатает содержимое файла без возвращаемого значения.
Okey, поэтому ответы здесь на самом деле не совсем корректны; в некотором смысле даже вводящим в заблуждение.
include
принимает содержимое файла и помещает его в контекст. Одним из наиболее распространенных применений является передача области переменных вокруг, т.е. передавая видимые переменные в ваш взгляд, включив их в обработчик и используя include
в представлении. Обычные, но есть и другие виды использования; вы также можете return
внутрь included
файла.
Скажем, у вас есть файл вроде этого:
<?php return array ( 'some', 'php' 'based' 'configuration', 'file' ); # config
Выполнение $config = include 'example-config-above.php';
отлично, и вы получите массив выше в переменной $config
.
Если вы попытаетесь включить файл, у которого нет оператора return
вы получите 1
.
Время Готча
Вы можете подумать, что include 'example-config-above.php';
на самом деле ищет файл в каталоге, в котором находится файл, вызывающий include
, но он также ищет файл в различных других путях, а другие пути имеют приоритет над локальным путем!
Поэтому, если вы знаете, что у вас есть файл, подобный выше, с return
внутри него, но получают 1
и потенциально что-то вроде странных ошибок PEAR или таких, то вы, вероятно, сделали что-то вроде этого:
// on a lot of server setups this will load a random pear class include 'system.php'
Поскольку он загружает файл без возврата, вы получите 1
вместо (в нашем примере) массив конфигурации, который мы ожидаем.
Легкое исправление, конечно же:
include __DIR__.'/system.php'
= задает оператор
== для проверки равным
проверить для операторов php
echo include("file.txt");
Это возвращает xxx1
«1» – это возвращаемое значение функции include, означающее успех доступа к файлу. В противном случае он ничего не возвращает, в этом случае генерируется ошибка синтаксического анализа.
echo print "hello";
Это тоже возвращает, hello1
То же, что и выше; '1', обозначающий успех, печатается.
echo echo "hello"; print echo "hello";
Оба вышеуказанных случая вызывают ошибку. Поскольку функция эха не имеет возвращаемого значения, следовательно, не определено.
echo echo "hello"; print echo "hello"; (1st) (2nd)
Теперь второе «эхо» в обоих случаях создает неопределенное. Первое «эхо» или «печать» не может принимать вывод hello с неопределенным (созданным вторым эхом).
if((print "hello")==1) echo "hey!"; output: hellohey! ('echo' in the 2nd line can be a print, it doesn't matter)
По аналогии,
if((include ("file.txt"))==1) echo "hey!"; output: xxxhey!
Другая рука,
if((echo "hello")==1) echo "hey!"; output: an error
В первых двух случаях функции (print и include) возвращаются 1, в третьем случае «echo» не возвращает никакого возвращаемого значения (undefined), поэтому третий случай вызывает ошибку.
Это потому, что функция include возвращает 1 при успешном завершении. Вы получаете, как вы говорите, «мое имя – earl1», потому что сначала выполняется код внутри включенного файла, и печать «мое имя – это earl», а затем локальное echo запускает печать возвращаемого значения include (), которое равно 1.
В файле /etc/php5/cli/php.ini установите переменную:
short_open_tag = 1
Ищите символ 1
в файле .php, и вытащите кепку в задницу.