PHP版本会导致相同代码的不同跳行行为

PHP版本会导致相同代码的不同跳行行为,php,Php,当在PHP5.3.8中从命令行调用上述代码时,它将打印输入文件中的行,并跳过任何空行。但是,在PHP5.2.6中,它不会跳过空行 是否有任何方法可以更改代码,使其跳过lder版本中的空行 while($c=fgets(STDIN)){ if($c===PHP_EOL){ continue; } else { echo $c; } } 另外,我认为php版本并不重要。配置似乎有问题。如果不需要尾随空格,可以使用: $c = str_

当在PHP5.3.8中从命令行调用上述代码时,它将打印输入文件中的行,并跳过任何空行。但是,在PHP5.2.6中,它不会跳过空行

是否有任何方法可以更改代码,使其跳过lder版本中的空行

while($c=fgets(STDIN)){
    if($c===PHP_EOL){
        continue;
    }
    else {
        echo $c;
    }
}

另外,我认为php版本并不重要。配置似乎有问题。

如果不需要尾随空格,可以使用:

$c = str_replace("\r\n", "", $c);
如果您这样做,您可能应该检查字符串长度或使用以下选项:

$c = rtrim( $c, "\n\r");
if( $c == ''){
  continue;
}

这种差异可能是由php.ini更改引起的,而不是版本。检查php配置文件中的
auto\u detect\u line\u endings
键,或者如果您有访问权限,请尝试

if( ($c{0} == "\n") || ($c{0} == "\r")){
  continue;
}


fgets
使用的是
auto\u detect\u line\u endings
PHP\u EOL
始终根据操作系统获取正确的行尾字符,但是如果不将
auto\u detect\u line\u endings
设置为true,则可能会失败。

如果将条件更改为

<?php
    ini_set("auto_detect_line_endings", true);
?>
这应该适用于任何平台


请参见

是否确定
PHP_EOL
在两种环境中都是相同的,并且它与所讨论的文件的
EOL
字符匹配?我认为PHP_EOL是一个预定义的常量,因此应该适用于任何系统,请参见此处:它是预定义的,但它映射到平台EOL。因此,如果您在不同的平台之间切换,并且您正在读取的文件是在不同的平台上创建的,那么
EOL
可能不匹配。哦,我明白了,这没有多大帮助。。感谢推荐在第一个示例中使用
if($c='')
而不是
if(empty($c))
;“0”可能是有效的输入。@Phoenix With
fgets
string包含
\n
resp
\r\n
,因此当字符串以
\n
\r
开头时,它只包含换行符。这是正确的,但假设用户输入序列
0\n
。在通过
rtrim()
运行后,
$c
现在包含字符串“0”,这将导致
empty($c)
返回
true
,这可能不会导致此应用程序的正确行为。谢谢,我认为配置也可能有问题,还有一个php警告,我会问我的主机提供商。好的,我刚刚试过这个。在php.ini中,它被设置为“Off”。我改为“开”,但它仍然不起作用。谢谢!这很有效。你能给我发个文档链接吗?我想更好地理解它哦,我现在明白了,它是ascii,很棒,tnx这个字符串在不同的服务器上提供不同的输出…帮助<代码>$lat=((ord($str[7])@Reddox您能就这个问题单独问一个问题吗?OP的问题和您的问题不一样
if(ord($c[0])==0x0a || ord($c[0])==0x0d)