我正在使用cakePHP并且被这个谜语困住了。 前一段时间我创建了一个函数,使用file_get_contents()和字符串替换函数在文件中动态插入自定义路由。
$filename = "301routes.php";
$path = SERVER_PUBLIC_PATH . 'app' . DS . 'config';
$add_data = "Router::connect('".$old."', array('controller'=>'index_router', 'action'=>'redirect_301','".$new."'));\n";
$file_data = file_get_contents($path . DS . $filename);
$file_data = str_replace("<?php\n","<?php\n".$add_data,$file_data);
file_put_contents($path . DS . $filename, $file_data);
这有效,但现在我试图在其他项目中使用完全相同的功能,并且只有在没有PHP标记时才能工作。问题在于file_get_contents()函数,因为当内容为:
时,它会很好地读取文件// routes here
Router::connect('/articles/category/en/test', array('controller'=>'index_router', 'action'=>'redirect_301','/articles/category/en/test-old'));
但是当我改变这样的开始时
<?php
Router::connect('/articles/category/en/test', array('controller'=>'index_router', 'action'=>'redirect_301','/articles/category/en/test-old'));
?>
file_get_contents()仅返回文件的一部分:
string(154) "'index_router', 'action'=>'redirect_301','/articles/category/en/test-old')); ?>"
有人可以帮我这个吗?
答案 0 :(得分:1)
Try: Create new file 301routes.php in config directory then read write permission of file.
$filename = "301routes.php";
$path = __DIR__;
$add_data = "Router::connect('".$old."', array('controller'=>'index_router', 'action'=>'redirect_301','".$new."'));\n";
$file_data = file_get_contents($path . DS . $filename);
$file_data = str_replace("<?php\n","<?php\n".$add_data,$file_data);
file_put_contents($path . DS . $filename, $file_data);
答案 1 :(得分:0)
运行php代码并分配给$ file_data变量,
ob_start();
$file_data = file_get_contents($path . DS . $filename);
ob_end_flush();