2014-02-27 74 views
0

我有一個文件,例如:hello.txt的,在它下面的內容一些預定義的字符串後面添加字符串

嗨 尼斯

INSERT文字標示

我想創建進入腳本「 Hello World「之後#### INSERT TEXT MARKER ####。

我已經使用下面的代碼來做到這一點。

<?php 
function insert_into_file($file_path, $insert_marker, $text, $after = true) { 
    $contents = file_get_contents($file_path); 
    $new_contents = preg_replace($insert_marker, ($after) ? '$0' . $text : $text . '$0', $contents); 
    return file_put_contents($file_path, $new_contents); 
} 

$file_path = "hello.txt"; 
$insert_marker = "####INSERT TEXT MARKER####"; 
$text = "Hello World"; 

$num_bytes = insert_into_file($file_path,$insert_marker,$text,true); 

if ($num_bytes === false) { 
    echo "Could not insert into file $file_path."; 
} else { 
    echo "Insert successful!"; 
} 
?> 

但是我的文件變空了。 請幫忙!

+1

如果沒有模式匹配,那麼爲什麼不用用戶'str_replace'? –

回答

1

您需要分隔符。

$new_contents = preg_replace('/'.$insert_marker.'/', ($after) ? '$0' . $text : $text . '$0', $contents); 

而且最好使用preg_quote()

$new_contents = preg_replace('/'.preg_quote($insert_marker, '/').'/', ($after) ? '$0' . $text : $text . '$0', $contents); 
+0

'preg_quote()'。 – zerkms

+0

感謝它幫助! – user3286692

0

除了這個事實,你的正則表達式缺少分隔符,你實際上並不需要擺在首位;下面的代碼會做同樣的事情:

file_put_contents($file_path, str_replace(
    $insert_marker, 
    $after ? $insert_marker . $text : $text . $insert_marker, 
    $contents 
)); 
相關問題