想知道是否有一种快速方法可以递归查找以.php结尾的每个文件,并在开头添加此行..
<? $DOCUMENT_ROOT = '/usr/share/nginx/html';?>
尝试过register_globals等没有球,所以这看起来是最简单的方法。
有什么想法吗?
答案 0 :(得分:2)
$path = "somedir/";
$directory = new RecursiveDirectoryIterator($path);
$iterator = new RecursiveIteratorIterator($directory);
$regex = new RegexIterator($iterator, '/^.+\.php$/i', RecursiveRegexIterator::GET_MATCH);
foreach($regex as $file) {
$file = $file[0];
$contents =
"<?php $DOCUMENT_ROOT = '/usr/share/nginx/html';?>\n"
. file_get_contents($file);
file_put_contents($file, $contents);
}
我不知道它将如何执行大量文件,明智地使用。顺便说一句,您应avoid the short open tag并始终使用<?php
。
在更新之前我已经回答了问题,将"<?php $DOCUMENT_ROOT = '/usr/share/nginx/html';?>\n"
作为每个文件中所需的行。这是一个坏主意,正如@DanRay所评论的那样:
您不希望在每个文件的顶部对此值进行硬编码。您想要添加对设置的单个配置文件的引用。我知道它不太可能改变,但它是一个配置值,配置值应保存在一个地方,而不是在整个代码库中散布。
没有RegexIterator
的替代实施:
$path = "somedir/";
$directory = new RecursiveDirectoryIterator($path);
$iterator = new RecursiveIteratorIterator($directory);
foreach($iterator as $file) {
$path = $file->getRealPath();
if(
!$file->isFile()
|| !preg_match('/^.+\.php$/i', $path)
) {
continue;
}
$contents =
"<? $DOCUMENT_ROOT = '/usr/share/nginx/html';?>\n"
. file_get_contents($path);
file_put_contents($path, $contents);
}
答案 1 :(得分:2)
使用PHP 4.2.3+,您只需使用PHP指令auto_prepend_file
。
例如,在php.ini
:
auto_prepend_file = /var/www/html/myproject/myprepend.php
另一种可能性是在.htaccess
文件中使用该指令:
php_value auto_prepend_file /var/www/html/myproject/myprepend.php
其中/var/www/html/myproject/myprepend.php(或您使用的任何路径)只包含
<?php
$DOCUMENT_ROOT = '/usr/share/nginx/html';