2013-08-04 80 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

你说得对,我修改了答案。谢谢! –