You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP代码本地运行正常 服务器报T_DOUBLE_ARROW语法错误如何解决

问题原因

该语法报错的核心原因是PHP版本不兼容。fn($value) => ... 是PHP 7.4版本才正式支持的箭头函数语法,你的本地环境PHP版本≥7.4所以运行正常,而服务器的PHP版本低于7.4,无法识别该语法,因此抛出unexpected '=>'的报错。

解决方案

有两种通用解决方法:

方法1:升级服务器PHP版本

直接将服务器的PHP版本升级到7.4或更高版本即可解决,操作前注意确认服务器上其他运行的代码兼容高版本PHP。

方法2:将箭头函数替换为兼容低版本的匿名函数

无需升级PHP版本,只需要把报错行的箭头函数改写为PHP 5.3及以上都支持的匿名函数写法即可:
把原来的报错行:

$dna = array_filter($dna, fn($value) => !is_null($value) && $value != '');

替换为:

$dna = array_filter($dna, function($value) {
    return !is_null($value) && $value != '';
});
其他可优化的代码问题

顺便修复代码中存在的几个潜在bug:

  • 代码中$dna1、$dna2没有提前初始化,文件读取失败时调用array_intersect会抛出警告,建议在代码开头声明这两个变量
  • 取文件扩展名的逻辑不严谨,若文件名包含多个.(比如test.1.csv)会取到错误的扩展名,建议用pathinfo函数获取
  • 输出div的行标签未闭合,原代码echo '<div align = "center"';缺少右尖括号,应改为echo '<div align = "center">';
修正后的完整兼容代码
<?php
    $csv1 = array();
    $csv2 = array();
    $dna1 = array();
    $dna2 = array();
    // check there are no errors
    if($_FILES['csv1']['error'] == 0 && $_FILES['csv2']['error'] == 0){
        $name1 = $_FILES['csv1']['name'];
        $name2 = $_FILES['csv2']['name'];
        $ext1 = strtolower(pathinfo($name1, PATHINFO_EXTENSION));
        $ext2 = strtolower(pathinfo($name2, PATHINFO_EXTENSION));
        $type1 = $_FILES['csv1']['type'];
        $type2 = $_FILES['csv2']['type'];
        $tmpName1 = $_FILES['csv1']['tmp_name'];
        $tmpName2 = $_FILES['csv2']['tmp_name'];

        // check the file is a csv
        if($ext1 == 'csv' && $ext2 == 'csv'){
            if(($handle1 = fopen($tmpName1, 'r')) != FALSE && ($handle2 = fopen($tmpName2, 'r')) != FALSE) {
                // necessary if a large csv 
                $i = 0;
                while(($data1 = fgetcsv($handle1, 1024, ',')) != FALSE) {
                    if(sizeof($data1) > 1){
                        $dna1[$i] = $data1[1];
                        $i = $i + 1;
                    }
                }
                fclose($handle1);
                $i = 0;
                while(($data2 = fgetcsv($handle2, 1024, ',')) != FALSE) {
                    if(sizeof($data2) > 1){
                        $dna2[$i] = $data2[1];
                        $i = $i + 1;
                    }
                }
                fclose($handle2);
            }
            $dna = array_intersect($dna1, $dna2);
            $dna = array_filter($dna, function($value) {
                return !is_null($value) && $value != '';
            });
            echo '<div align = "center">';
            foreach ($dna as $key => $value) {
                if ($key > 0)
                    echo ''.$value.'';
                    echo '<br>';
            }
            echo '</div>';
        }else{
            echo "Esse arquivo não é csv!";
        }
        
    }   
?>

内容的提问来源于stack exchange,提问作者Rodrigo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:54:04