2016-03-02 2 views
0

Итак, у меня есть страница под названием create.php, которая создает другой файл php с именем «1». В этом php-файле называется «1». Я надеялся использоватьПолучить имя текущей страницы с файлом, созданным файлом PHP

<?php echo $_SERVER['PHP_SELF'];?> 

или

<?php $path = $_SERVER["SCRIPT_NAME"];echo $path;?> 

Чтобы создать ссылку, которая будет принимать номер страницы и +1 его. Когда я выполняю обе эти функции вместо того, чтобы получить то, что, я думаю, получаю, «1», я получаю «создать», страницу, с которой он был создан. Я очень ошеломлен тем, почему это происходит, код определенно находится на «1», и я даже дважды проверял, чтобы сделать созданный файл и что я был на нем, так почему он думает, что текущая страница «создает», ?

код используется

<?php 
// start the output buffer 
ob_start(); ?> 
<?php echo $_SERVER['PHP_SELF'];?> 
<?php 
// open the cache file "cache/1" for writing 
$fp = fopen("cache/1", 'w'); 
// save the contents of output buffer to the file 
fwrite($fp, ob_get_contents()); 
fclose($fp); 
ob_end_flush(); 
?> 
+1

Никогда не используйте только цифровые символы назвать свои сценарии. Используйте полезные имена. –

+0

разместите свой код в вопросе – GuRu

+0

Создайте php, выплевывая файлы, которые зритель должен читать в порядке, поэтому его цифры. Также отредактирован в коде выше. Это код для страницы, который сохраняет файл. когда этот файл просматривается, он показывает путь к файлу, который его создал, а не к самому себе. – AtomicSteed

ответ

1

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

<?php 
// start the output buffer 
ob_start(); 
// echo the path of the current script 
echo $_SERVER['PHP_SELF']; 

// open the cache file "cache/1" for writing 
$fp = fopen("cache/1", 'w'); 
// save the contents of output buffer to the file 
fwrite($fp, ob_get_contents()); 
fclose($fp); 
ob_end_flush(); 

Я удалил PHP закрытия тега (?>), когда он последовал открытый PHP тегом (<?php).

Теперь должно быть ясно, что без буферизации вывода сценарий create.php отображает свой собственный путь относительно корня документа. Выходная буферизация захватывает вывод и помещает его в файл cache/1.

Для этого вам даже не нужна буферизация вывода. Вы можете просто удалить все вызовы функций ob_*, удалите echo() линию и использовать:

fwrite($fp, $_SERVER['PHP_SELF']); 

Это ясно, что это не ваша цель. Вы, вероятно, хотите создать PHP-файл, который содержит следующее содержание:

<?php echo $_SERVER['PHP_SELF'];?> 

Это так просто, как положить этот текст в строку и записать строку в файл:

<?php 
$code = '<?php echo $_SERVER["PHP_SELF"];?>'; 
$fp = fopen("cache/1", 'w'); 
fwrite($fp, $code); 
fclose($fp); 

Вы можете даже использовать функцию PHP file_put_contents() и весь код, размещенные на вопрос становится:

file_put_contents('cache/1', '<?php echo $_SERVER["PHP_SELF"];?>'); 

Если вам нужно поставить больший блок PHP код в созданный файл, то вы можете использовать nowdoc строки синтаксис:

$code = <<<'END_CODE' 
<?php 
// A lot of code here 
// on multiple lines 
// It is not parsed for variables and it arrives as is 
// into the $code variable 
$path = $_SERVER['PHP_SELF']; 
echo('The path of this file is: '.$path."\n"); 
$newPath = dirname($path).'/'.(1+(int)basename($path)); 
echo('The path of next file is: '.$newPath."\n"); 
// That's all; there is no need for the PHP closing tag 

END_CODE; 

// Now, the lines 2-11 from the code above are stored verbatim in variable $code 
// Put them in a file 
file_put_contents('cache/1', $code); 
+0

Это, похоже, хорошо работает с файлом только для php, будет ли он работать с файлом, который использует как php, так и html? – AtomicSteed

+0

Он работает с чем угодно. Синтаксис [синтаксис строки nowdoc] (http://php.net/manual/en/language.types.string.php#language.types.string.syntax.nowdoc) позволяет программисту вводить любые данные в строку без необходимости для выхода из специальных символов или '$'. Все, что вы помещаете между строками '$ code = <<< 'END_CODE'' и' END_CODE; ', приходит в файл' cache/1', когда код запускается. Однако это не рекомендуется. Используйте механизм шаблонов для генерации файлов с динамическим контентом (проще писать контент таким образом) или просто поместить содержимое в новый файл и сделать его копии, если он статичен. – axiac

+0

Спасибо за информацию, я рассмотрю использование механизма шаблонов или то, что вы поставили выше, если я не могу. – AtomicSteed

Смежные вопросы