PHP爆炸:脚本工作在Windows上,而不是在Debian上
问题描述:
我有一个脚本,它在Windows上完成工作,但不在Debian上。两者都运行相同的PHP版本,我似乎无法弄清楚为什么它不适用于Debian。PHP爆炸:脚本工作在Windows上,而不是在Debian上
$content = file_get_contents('ua.log');
$arr = explode(PHP_EOL, $content);
foreach($arr as $x) {
$i = explode(' ', $x);
if($i[11] == '"user/agent1.0"'){
$ips[] = $i[0];
}
else{
};
};
我检查了权限并使用了长目录(/var/www/ua.log)。仍然似乎没有工作,因为$我返回NULL。
答
除了@ Kayasax的评论,Linux文件系统是区分大小写(即Hello.txt与hello.txt不是同一个文件),我还有一个注释要做。
在Windows上,PHP_EOL
将默认为\r\n
,而在Linux上则只有\n
。因此,如果文件是在Windows上创建的,并且在Linux上运行您的代码,它可能会尝试查找Linux的行尾并且无法正确地分解文件,反之亦然。
答
您可能会发现它更容易使用
foreach (file("/some/file.txt", FILE_IGNORE_NEW_LINES) as $x) {
....
}
关于案件$i = explode(' ', $x);
- 它也可能是一个有点不同。最好使用类似preg_split(",\s+,", $x);
的东西,但要看具体的文件内容。
谢谢。
linux文件系统区分大小写 –
明白了。似乎没有问题,我使用了正确的案例。 – Marlon