解析错误:语法错误,第1行意外的$ end

时间:2015-01-27 04:37:12

标签: php jquery ajax wordpress apache

我正在编写一个与MailChimp的API集成的wordpress插件,用于在MailChimp列表中存储电子邮件地址。

我有一个' store-address.php'在提交表单时通过 AJAX 运行。

该插件适用于AJAX在本地或GoDaddy WordPress安装上的网址。但是不能在我的暂存网站上工作,它位于' MediaTemple.net'。

当我打电话给' store-address.php'我收到这个错误......

  

解析错误:语法错误,意外{在第1行的/wp-content/plugins/plugin-name/mailchimp-api/inc/store-address.php

这是我的ajax功能

$('#subscribe').submit(function(e) {

        $.ajax({
            url: $plugin_url '/plugin-name/mailchimp-api/inc/store-address.php',
            data: 'ajax=true&email=' + escape($('#email').val()),
            success: function(msg) {
                $('#response').html(msg);
            }
        });

        return false;
    });

<小时/> 而我的&#39; store-address.php&#39;看起来像这样。

<?php
 if(session_id()==''){
  session_start();
 }
 function storeAddress(){

 /*
  * Validation
  */
 if(!$_GET['email']){ return "No email address provided"; } 

 if(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$/i", $_GET['email'])) {
    return "Email address is invalid"; 
 }

 require_once('MCAPI.class.php');

 /*
  * get MailChimp API details from the plugin settings stored in the session.
  */     $mcKey = $_SESSION['mc_api_key'];
 $mcID = $_SESSION['mc_list_id'];

 $api = new MCAPI($mcKey);
 $list_id = $mcID;

 if($api->listSubscribe($list_id, $_GET['email'], '') === true) {
    return 'Success! Check your email to confirm sign up.';
 }else{
    return 'Error: ' . $api->errorMessage;
 }

}

  /*
   * If being called via ajax, autorun the function
   */
  if($_GET['ajax']){ echo storeAddress(); }
?>

phpVersion 5.5

正如我之前提到的,此代码适用于本地环境和goDaddy托管站点。只是不在MediaTemple上我还扫描了任何PHP语法错误的代码,我找不到任何东西。

任何正确方向的帮助或观点都是天赐之物。 感谢

2 个答案:

答案 0 :(得分:3)

错误是由于FileZilla的传输类型设置为“Auto”而导致的,这会中断换行符。

将传输类型切换为“二进制”并重新启动FileZilla后,我重新上传了该插件,一切正常。

资源: Filezilla removes line breaks on php files

答案 1 :(得分:0)

第1行

意外$结束

意外的$end表示{花括号}与未封闭的代码或控制块不匹配。

如果解析器抱怨line 1,那么只有当你的php脚本确实只是一行时才会发生这种情况。第1行中的初始<?php不可能单独触发它。

发生这种情况的唯一方法是不匹配的换行符。 PHP只关心 LF 0x0A)。如果您是在经典Mac OS或默认编辑器上进行开发,则 CR 0x0D)可能会用于换行。 CR LF 的旧DOS / Windows组合也可以使用。但那并不是你拥有的。

实质上,当代码在编辑器中正确显示时,PHP会将其视为:

<?php⏎if(session_id()=='')⏎{ session_start();⏎}⏎function storeAddress(){⏎// Validation⏎if(!$_GET['email']){ ...

就是这样。回车 CR 不起作用。 PHP将理解前几个语句,但第一个注释// Validate只是掩盖了其余的代码。这就是为什么打开的函数声明会导致悬空“$end”。