使用PHP文件创建的文件获取当前页面名称

时间:2016-03-02 09:30:45

标签: php

所以我有一个名为create.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 :(得分: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);