【问题标题】:Parse error: syntax error, unexpected T_FUNCTION line 10?解析错误:语法错误,意外的 T_FUNCTION 第 10 行?
【发布时间】:2011-06-24 09:20:30
【问题描述】:

我的代码有什么问题?我在我的测试服务器上运行了代码并且代码有效,但是当我将它上传到我的生产服务器时,我得到了

Parse error: syntax error, unexpected T_FUNCTION in /hermes/bosweb/web013/b130/ipg.acrsflcom/darayngedbeats/gentest.php on line 10

这是我的代码

$old = "http://darayngedbeats1.s3.amazonaws.com    /mp3/CrazyMonsta2.mp3?AWSAccessKeyId=AKIAJXA36ESCLQHCB54Q&Expires=1297279906& Signature=HD36ZQE8yeTIW6JPWKMcciPTiTs%3D"; //enter the key that needs to be converted
$search =  array(":","?","=","&","%");
$replace = array("%3A","%3F","%3D","%26","%25");

function search_replace($s,$r,$sql)
{ $e = '/('.implode('|',array_map('preg_quote', $s)).')/';
  $r = array_combine($s,$r);
  return preg_replace_callback($e, function($v) use ($s,$r) { return $r[$v[1]];  },$sql);
}

echo "<br><br>";
$new = search_replace($search,$replace,$old);
echo $new;

?>

【问题讨论】:

  • 我认为它与回调函数有关
  • 第 7 行 return preg_replace_callback($e, function($v) use ($s,$r) { return $r[$v[1]]; },$sql);
  • 问:“第 10 行是哪一行?” - A:“第 7 行 [代码]”我很喜欢。
  • 第 7 行是 10 返回 preg_replace_callback

标签: php parse-error


【解决方案1】:

这个错误很可能是由

引起的
return preg_replace_callback($e, function($v) use ($s,$r) { return $r[$v[1]];  },$sql);

您可能正在使用不支持闭包的 PHP 5.2 或更早版本。您可以通过phpinfo()了解您使用的 PHP 版本。

您可能需要升级到 PHP 5.3+,或者使用create_function,或者编写一个静态函数并将其作为callback 传递。

这里是最后一个选项的例子,使用一个简单的类来存储$r的状态:

class My_callback {
  public function __construct($s, $r) {
    $this->s = $s; $this->r = $r;
  } 

  function callback($v) { return $this->r[$v[1]]; }
}

function search_replace($s,$r,$sql) {
  $e = '/('.implode('|',array_map('preg_quote', $s)).')/';
  $r = array_combine($s,$r);
  $c = new My_callback($s, $r);
  return preg_replace_callback($e, array($c, 'callback'), $sql);
}

【讨论】:

  • 好的,我试过这个$newfunc = preg_replace_callback($e, create_function($v) use ($s,$r) { return $r[$v[1]]; },$sql); 现在我得到Parse error: syntax error, unexpected T_USE in /hermes/bosweb/web013/b130/ipg.acrsflcom/darayngedbeats/gentest.php on line 10
  • @user514584: use 在 PHP 5.3 之前也不存在。您应该阅读@meagar 链接的文档,了解create_function 的工作原理。再次在这里:php.net/manual/en/function.create-function.php。不幸的是,您不能使用create_function 创建闭包,因此您必须考虑如何在回调中访问$r$e
  • @user 尝试编写一个常规函数并将其作为字符串传递。
  • 不使用 eval() 将函数作为字符串传入?我记得 eval 是邪恶的。它打开了太多的安全漏洞。只需提取并命名它。
  • @Scott 我说的是callback,与您传递给call_user_func 的内容相同。与eval无关。
【解决方案2】:

对于任何在 PHP 5.3+ 上遇到此错误的人,尤其是使用 wordpress 主题的人,我建议您查看服务器上实际文件的格式。

当我遇到这个错误并查看在服务器上抛出错误的 PHP 文件时,它们没有换行符并且被有效地缩小到一行。

由于某种原因,Filezilla 在我上传文件时去掉了换行符,这就是导致同样错误发生的原因。

通过将 Filezilla 中的传输类型更改为二进制(传输 > 传输类型 > 二进制)并重新上传 wordpress 主题,这解决了我的问题!

我希望这对某人有帮助!

【讨论】:

  • 非常感谢您!从来没有想过要尝试,但它确实修复了我的 500 个错误 :)
  • 也谢谢你。刚刚也救了我的培根!
  • 感谢您的分享,这对我很有帮助
  • 这对我来说是天赐之物。我一直在寻找 HOURS 试图找到答案,这最终解决了它。非常感谢你发布这个!
【解决方案3】:

尝试将您的回调函数提取到一个单独的命名函数中并通过名称引用它。

【讨论】:

    【解决方案4】:

    我想你正在寻找 create_function:http://php.net/manual/en/function.create-function.php

    php4和php5都支持create_function

    【讨论】:

      【解决方案5】:

      到目前为止,这个问题基本上已经过时了,因为 5.3 已经存在了很长时间,但是除了其他答案提出的要点之外,我想指出您正在尝试做的事情已经可以使用 @ 完成987654321@:

      $new = strtr($old, array(
        ':' => '%3A',
        '?' => '%3F',
        '=' => '%3D',
        '&' => '%26',
        '%' => '%25',
      ));
      

      【讨论】:

        【解决方案6】:
        PHP Parse error:  syntax error, unexpected 'function' (T_FUNCTION)
        

        在我的例子中,我通过在之前声明的变量末尾添加一个我忘记的分号来修复了这个错误..

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-11
          • 1970-01-01
          • 1970-01-01
          • 2015-05-26
          • 2011-07-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多