V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
william23
V2EX  ›  PHP

关于一个 php 报错的问题

  •  
  •   william23 · 2016-06-30 16:12:47 +08:00 · 4033 次点击
    这是一个创建于 2859 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先 本地环境 wnmp 和虚拟机 lnmp 跑下来都没问题

    但是放到了线上,突然报了这个错误

    FastCGI sent in stderr: "PHP message: PHP Parse error: syntax error, unexpected '@'

    而且不仅仅是一处,这个 @是用来加载文件的,本身是没有语法错误的。

    所以没有思路,所以发帖求助

    第 1 条附言  ·  2016-06-30 17:13:05 +08:00
    import("@.ORG.IpLocation");

    报错的是这句。。

    说 @有错
    26 条回复    2016-06-30 21:08:26 +08:00
    william23
        1
    william23  
    OP
       2016-06-30 16:20:18 +08:00
    我是感觉不像代码的问题,更像配置的问题,但是 lnmp 的环境虚拟机也跑了,也没发现这个问题
    lynnworld
        2
    lynnworld  
       2016-06-30 16:21:11 +08:00
    不贴代码么?
    qiayue
        3
    qiayue  
       2016-06-30 16:22:26 +08:00
    php 的版本跟你本地不一致,你用了某个比较旧的函数
    realpg
        4
    realpg  
       2016-06-30 16:31:20 +08:00
    代码报错不贴代码……
    doushiyinweini
        5
    doushiyinweini  
       2016-06-30 16:42:18 +08:00
    我瞎猜一下 allow_url_fopen
    Scholer
        6
    Scholer  
       2016-06-30 16:43:30 +08:00
    我猜是 curl 要改成 curlFile
    william23
        7
    william23  
    OP
       2016-06-30 17:10:45 +08:00
    @qiayue 你是说我本地环境比较高?线上的环境低?
    william23
        8
    william23  
    OP
       2016-06-30 17:11:44 +08:00
    @realpg 没代码贴啊,因为这个只是所语法错误,但是并不是语法错误,而且去掉这个还有其他的
    realpg
        9
    realpg  
       2016-06-30 17:15:26 +08:00
    @william23
    先把双引号改成单引号看看
    b821025551b
        10
    b821025551b  
       2016-06-30 17:19:30 +08:00
    我想了好久 php 有 import 这个函数么?后来意识到这是 ThinkPHP 吧??
    william23
        11
    william23  
    OP
       2016-06-30 17:23:06 +08:00
    @b821025551b 是的
    qiayue
        12
    qiayue  
       2016-06-30 17:23:50 +08:00
    我之前以为你的 @ 是为了频闭函数的报错信息,所以猜你用了某个比较旧的函数,而你的线上环境是比较新版本的 PHP
    william23
        13
    william23  
    OP
       2016-06-30 17:34:02 +08:00
    @realpg
    这行报错会消失,但是又会有其他报错
    报错信息
    5 FastCGI sent in stderr: "PHP message: PHP Parse error: syntax error, unexpected '' . __URL__ . '' (T_CONSTANT_ENCAPSED_STRING)
    报错行
    $str .= ' <a href="' . __URL__ . '/tag/name/' . urlencode($tag) . '">' . $tag . '</a> ';

    我觉得不是语法的问题,因为毕竟其他环境是 i 没影响的
    william23
        14
    william23  
    OP
       2016-06-30 17:34:38 +08:00
    @qiayue 那现在觉得是什么问题呢?
    xuxu
        15
    xuxu  
       2016-06-30 17:35:40 +08:00
    用单引号试试 import('@.ORG.IpLocation');
    william23
        16
    william23  
    OP
       2016-06-30 17:37:41 +08:00
    @xuxu 这个的确可以,但是会一直报下去其他错误,难道全都有错?
    cxbig
        17
    cxbig  
       2016-06-30 17:39:12 +08:00   ❤️ 1
    先看 php 版本有没有不同
    从错误看很可能用了特殊字符
    看看代码在什么系统下写的,如果是 windows 要特别小心,建议用 sublime text 等编辑器, utf8 无 bom 存一遍。
    或者用 PhpStorm 之类的 IDE 做一次静态代码分析
    qiayue
        18
    qiayue  
       2016-06-30 17:44:28 +08:00
    应该就是线上 PHP 版本问题,初步怀疑是线上版本较低
    william23
        19
    william23  
    OP
       2016-06-30 17:48:16 +08:00
    @cxbig 恩,我用的就是 phpstorm ,是没有语法报错的,在虚拟机的环境是 ubuntu 和线上是一样的,我先 check 下 php 的版本吧。
    william23
        20
    william23  
    OP
       2016-06-30 18:04:20 +08:00
    @qiayue
    @cxbig
    看了下版本,虚拟机和线上都是 5.5.9 ubuntu 都是 14.17
    这下又没有头绪了~~~
    cxbig
        21
    cxbig  
       2016-06-30 18:18:46 +08:00
    @william23
    检查一下 php-fpm 版本和各系统的文件编码
    然后有没有什么相关的缓存系统?清空或重启一下
    realpg
        22
    realpg  
       2016-06-30 18:36:22 +08:00
    @william23
    1. phpinfo() 看一下当前生效的 php.ini 在哪里
    然后去掉所有解释性注释把有效配置(包含注释的有用配置)贴上来
    widdy
        23
    widdy  
       2016-06-30 19:03:55 +08:00
    权限呢,可以把应用目录权限改改看看。
    william23
        24
    william23  
    OP
       2016-06-30 20:00:15 +08:00
    @widdy 权限是所有的, chmod 777 -R 过了
    notgod
        25
    notgod  
       2016-06-30 20:09:21 +08:00
    这么弱智的问题.... 我都不好意思说你
    你玩 PHP 文档看过吗?

    import("@.ORG.IpLocation");
    这里的 . 因为双引号的关系 被解析为连接符 所以报 @开始的错误
    只有单引号 才可以不解析内容 直接输出

    问个问题代码还藏着掖着 指望别人猜?
    什么本地能运行 线上不能运行,
    你这么写 如果 php.ini 和安装的 php 源一致 能运行的纯粹是灵异问题

    <?php
    class MemberModel extends Model {

    public function recordqq($nickname,$figureurl,$gender)
    {
    $ip = get_client_ip();
    import('@.ORG.IpLocation');// 导入 IpLocation 类
    $Ip = new IpLocation('UTFWry.dat'); // 实例化类 参数表示 IP 地址库文件
    $area = $Ip->getlocation($ip); // 获取某个 IP 地址所在的位置
    $user = $this->getByNickname($nickname);
    print_r($user);
    if(!empty($user)){
    $data['lastloginip'] = $area['ip'];
    $data['logincount'] = array('exp','(logincount+1)');
    $data['lastloginaddress']=$area['country'];
    $data['lastlogintime'] = time();
    $this->save($data);
    }else{
    $data['nickname'] = $nickname;
    $data['avatar'] = $figureurl;
    $data['gender'] = $gender;
    $data['lastloginip'] = $area['ip'];
    $data['lastloginaddress']=$area['country'];
    $data['lastlogintime'] = time();
    $this->add($data);
    }
    }
    }
    ?>
    william23
        26
    william23  
    OP
       2016-06-30 21:08:26 +08:00
    @notgod 额。。并不是你想的这样,这个错其他地方并没有报,也是 linux 的环境,所以觉得和代码是无关的,是希望注意力集中在不是代码的地方,这个代码 apache 是 ok 的, windows 上的 nginx 也是 ok 的,虚拟机的 nginx 也是 ok 的,但是线上的 nginx 是不 ok 的,就是这样子,如果报错的话,我想起码虚拟机的 nginx 也会报同样的错吧,所以觉得会不会是什么配置文件的问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1010 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 19:17 · PVG 03:17 · LAX 12:17 · JFK 15:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.