Parse error: syntax error, unexpected $end on line 1

Parse error: syntax error, unexpected $end on line 1

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

我有一个 'store-address.php' 运行 通过 AJAX 提交的表格。

当 AJAX 在 local 或 GoDaddy WordPress 安装上 url 时,插件工作。但在 'MediaTemple.net'.

上托管的暂存站点上不起作用

当我对 'store-address.php' 进行 ajax 调用时,我收到此错误...

Parse error: syntax error, unexpected { in /wp-content/plugins/plugin-name/mailchimp-api/inc/store-address.php on line 1

这是我的 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;
    });


我的 'store-address.php' 看起来像这样。

<?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(); }
?>

php版本5.5

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

任何帮助或指向正确方向的信息都是天赐之物。 谢谢

第 1 行意外 $end

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

如果解析器抱怨 line 1,那么这只有在您的 php 脚本确实只是一行时才会发生。第 1 行中的初始 <?php 不可能自行触发。

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

本质上,虽然代码在您的编辑器中正确显示,但 PHP 会将其视为:

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

仅此而已。回车returnsCR不生效。 PHP 会理解前几条语句,但第一个注释 // Validate 只是掩盖了其余代码。这就是为什么打开的函数声明导致悬空的“$end”。

该错误是由于 FileZilla 的传输类型被设置为 "Auto" 而导致换行中断。

将传输类型切换为 "Binary" 并重新启动 FileZilla 后,我重新上传了插件,一切正常。

资源: Filezilla removes line breaks on php files