17

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

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;

?>
4

6 回答 6

32

该错误可能是由

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

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

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

这是最后一个选项的示例,使用一个简单的类来存储 的状态$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);
}
于 2011-02-09T19:37:50.230 回答
12

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

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

出于某种原因,当我上传文件时,Filezilla 删除了换行符,这就是导致同样错误发生的原因。

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

我希望这可以帮助别人!

于 2015-08-18T04:22:50.660 回答
4

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

于 2011-02-09T19:38:49.517 回答
3

我认为您正在寻找 create_function:http://php.net/manual/en/function.create-function.php

php4 和 php5 都支持 create_function

于 2011-02-09T19:38:11.243 回答
2

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

$new = strtr($old, array(
  ':' => '%3A',
  '?' => '%3F',
  '=' => '%3D',
  '&' => '%26',
  '%' => '%25',
));
于 2014-07-16T04:47:13.067 回答
1
PHP Parse error:  syntax error, unexpected 'function' (T_FUNCTION)

就我而言,我通过在先前声明的变量末尾添加一个我忘记的分号来修复此错误。

于 2021-06-06T20:48:17.053 回答