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

时间:2012-02-04 18:47:22

标签: php

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

当从php 5.3.8中的命令行调用上面的代码时,它会在输入文件中打印行,并跳过任何空行。但是,在php 5.2.6中,它不会跳过空行。

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

4 个答案:

答案 0 :(得分:2)

差异可能是由php.ini更改引起的,而不是版本。检查您的php配置文件中的auto_detect_line_endings键,或者您是否有访问权限尝试;

<?php
    ini_set("auto_detect_line_endings", true);
?>
auto_detect_line_endings使用

fgetsPHP_EOL始终根据操作系统获取正确的行尾字符,但如果未将fgets设置为true,auto_detect_line_endings可能会失败。

答案 1 :(得分:1)

如果您将条件更改为

if(ord($c[0])==0x0a || ord($c[0])==0x0d)

这适用于任何平台。

请参阅ord

答案 2 :(得分:0)

$c = str_replace("\r\n", "", $c);

P.S。我不认为php版本很重要。配置似乎有问题。

答案 3 :(得分:0)

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

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

如果你这样做,你应该检查字符串长度或使用它:

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