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


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

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

我有一个"商店地址.php",在提交表单时通过 AJAX 运行。

该插件在本地或GoDaddy WordPress安装上AJAX时工作。但是在我的登台站点上不起作用,因为它托管在"MediaTemple.net"上。

当我对"商店地址.php进行 ajax 调用时,我收到此错误...

解析错误:语法错误,第 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;
    });


我的"商店地址.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语法错误的代码,但我找不到任何东西。

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

该错误是由于FileZilla的传输类型设置为"自动"而导致的,这中断了换行符。

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

资源:Filezilla 删除了 php 文件上的换行符

第 1 行的意外$end

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

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

发生这种情况

的唯一方法是换行符不匹配。PHP只关心LF0x0A)。如果您在经典的Mac OS或默认为该操作系统的编辑器上进行开发,则CR0x0D)可能会用于换行符。CRLF的旧DOS/Windows组合也可以工作。但这不是你所拥有的。

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

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

仅此而已。回车符 CR 无效。PHP 将理解前几条语句,但第一个注释// Validate只是掩盖了其余的代码。这就是为什么打开的函数声明导致悬而未决的"$end"。