Php fgtecsv问题和无效的文件句柄

Php fgtecsv问题和无效的文件句柄,php,Php,下面的代码回显“Null”,但这怎么可能呢? fopen返回非false(即有效的文件处理程序),但fgetcsv返回NULL,这意味着给定的文件处理程序无效。我不明白 if ($fh = fopen("2014_01.csv", 'r') !== FALSE) { if ($test = fgetcsv($fh, 0, ';') == NULL) echo "Null"; fclose($fh); } else echo "fh error"; 看看P

下面的代码回显“Null”,但这怎么可能呢?
fopen
返回非false(即有效的文件处理程序),但
fgetcsv
返回NULL,这意味着给定的文件处理程序无效。我不明白

if ($fh = fopen("2014_01.csv", 'r') !== FALSE) {
    if ($test = fgetcsv($fh, 0, ';') == NULL)
        echo "Null";
    fclose($fh);
} else
    echo "fh error";
看看PHP。比较(
=
)的优先级高于赋值(
=
),这就是为什么它的计算结果如下:

if ($fh = (fopen() !== FALSE)) {
    if ($test = (fgetcsv() == NULL))
这不是你想要的。在作业周围加括号:

if (($fh = fopen("2014_01.csv", 'r')) !== FALSE) {
    if (($test = fgetcsv($fh, 0, ';')) == NULL)
看看PHP。比较(
=
)的优先级高于赋值(
=
),这就是为什么它的计算结果如下:

if ($fh = (fopen() !== FALSE)) {
    if ($test = (fgetcsv() == NULL))
这不是你想要的。在作业周围加括号:

if (($fh = fopen("2014_01.csv", 'r')) !== FALSE) {
    if (($test = fgetcsv($fh, 0, ';')) == NULL)

试着把这个$test=fgetcsv($fh,0,,;')放在if之前,可能它对if语法有效,但对if语法无效,因为计算顺序不正确(请参见下面的答案),
$fh
获取的值
TRUE
不是有效的句柄。PHP是正确的。尝试将$test=fgetcsv($fh,0,,;')放在if之前,可能它对if语法有效,但对if语法无效,因为计算顺序不正确(请参见下面的答案),
$fh
获取的值
TRUE
,该值不是有效的句柄。PHP是正确的。