2013-08-04 137 views
2

我有一個PHP程序,着眼於一個日誌文件,並將其打印到一個頁面(下面的代碼)呼應的東西。我不希望所述網站的用戶能夠查看包含/的任何行。我知道我可以使用trim來刪除某些字符,但是有沒有辦法刪除整行?例如,我想保留諸如「你好」之類的東西,並刪除像/xx.xx.xx.xx connected之類的東西。我希望刪除的所有行都有相同的公用密鑰/。人民在所述日誌文件名具有身邊<> S,所以我必須用htmlspecialcharacters不要用某些字符

$file = file_get_contents('/path/to/log', true); 
$file = htmlspecialchars($file); 
echo nl2br($file); 

感謝您的幫助!

編輯: 感謝所有的答案,目前與他們擺弄!

EDIT2: 最終代碼:

<?php 
$file = file_get_contents('/path/to/log', true); 
// Separate by line 
$lines = explode(PHP_EOL, $file); 

foreach ($lines as $line) { 
    if (strpos($line, '/') === false) { 
     $line = htmlspecialchars($line . "\n"); 
     echo nl2br($line); 
    } 
} 
?> 
+1

GOogle正則表達式.....應該讓你開始 – KyleK

+1

目前你正在使用'='而不是''=' – metadings

+0

'這個字符串加倍,但是沒有理由先放入'\然後立即將它變成'
'。只要做'htmlspecialchars($ line)'。'首先放置'
',然後放下'nl2br()'。由於您一次只讀一行,因此可以保證沒有其他換行符。 – JJJ

回答

3

你的意思是這樣嗎?

$file = file_get_contents('/path/to/log', true); 

// Separate by line 
$lines = explode(PHP_EOL, $file); 

foreach ($lines as $line) { 
    if (strpos($line, '/') === false) { 
     // If the line doesn't contain a "/", echo it 
     echo $line . PHP_EOL; 
    } 
} 

對於任何疑惑,PHP_EOL爲「行結束」的PHP恆定,促進不同的系統(在Windows,UNIX,等)之間的一致性。

+0

與其他答案中的'PHP_EOL'而不是'\ n'很好的聯繫。 – sbichenko

+0

我認爲它需要一樣,如果(!strpos($線,「/」),對不對?現在只打印在它 – Leetfail

+0

@Leetfail對不起與/ s的線,是的。它必須是'=== false'',而不是'!== false'。我的錯誤:) – federicot

0

使用str_replace功能 - http://php.net/manual/en/function.str-replace.php。另一種解決方案(逃避特殊字符前) -

/* pattern /\/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\sconnected/ = /xx.xx.xx.xx connected */ 
/* pattern will be replaced with "newtext" */ 
$file = file_get_contents("/path/to/log", true); 
$lines = explode("\n", $file); 
foreach ($lines as $line) 
    $correctline = preg_replace('/\/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\sconnected/', 'newtext', $line); 
    echo $correctline; 
} 
+1

整個事情是一個字符串,所以如果我找到包含這些東西串,我怎麼會告訴它只是替換成「」一條線? – Leetfail

+0

我編輯了我的答案。 – GLES

+0

如果它是正確的,則將其標記爲答案或upvote。謝謝! – GLES

0

如果您是通過行的文件行迭代可以用preg_match檢查行包含/字符,並跳過回聲,如果它。如果不是,首先將它們拆分爲新行並遍歷該數組。

如果你不想拆分文件,你可以使用preg_replace和正則表達式,如(^|\n).*/.*(\n|$),並用空字符串替換。

0
<?php 
    $file = file_get_contents("/path/to/log", true); 
    $lines = explode("\n", $file); 
    foreach ($lines AS $num => $line) 
    { 
     if (strpos($line, "/") === false) // Line doesn't contain "/" 
     { 
      echo htmlspecialchars($line) . "\n"; 
     } 
    } 
?> 
+1

如果'/'是第一個字符,'strpos'不會返回'0'嗎?我會把條件改成'strpos($ line,「/」)!== false'。 – sbichenko

+0

你說得對,我修改了答案。謝謝! –