2015-03-03 2 views
1

Я использую cakePHP и застрял в этой загадке. Время от времени я создал функцию, которая динамически вставляет пользовательские маршруты в файл с помощью file_get_contents() и функции замены строк.file_get_contents() не умеет читать теги PHP <?php ?>

$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() функция becouse читает хорошо файл, когда содержание:

// 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

Ttake взгляд на команду 'sed' Unix. Это сэкономит вам время на подобные вещи. – Alfwed

+1

'file_get_contents()' не будет разделять часть файла. Однако ваша функция будет включать теги ' 'В вашем массиве. Вы уверены, что это не просто проблема с отображением? –

+0

Да, это была проблема дисплея. Я не понимал, что в начале – Cipars

ответ

0

Для запуска PHP коды и присвоить $ file_data переменной,

ob_start(); 
$file_data = file_get_contents($path . DS . $filename); 
ob_end_flush(); 
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); 
Смежные вопросы