解析错误:语法错误,意外的T_FUNCTION第10行?

acr*_*crs 15 php parse-error

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

Parse error: syntax error, unexpected T_FUNCTION in /hermes/bosweb/web013/b130/ipg.acrsflcom/darayngedbeats/gentest.php on line 10
Run Code Online (Sandbox Code Playgroud)

这是我的代码

$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;

?>
Run Code Online (Sandbox Code Playgroud)

mea*_*gar 32

该错误可能是由

return preg_replace_callback($e, function($v) use ($s,$r) { return $r[$v[1]];  },$sql);
Run Code Online (Sandbox Code Playgroud)

您可能正在使用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);
}
Run Code Online (Sandbox Code Playgroud)


Pak*_*age 12

对于任何在PHP 5.3+上出现此错误的人,特别是使用wordpress主题,我建议您查看服务器上实际文件的格式.

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

出于某种原因,Filezilla在我上传文件时删除了换行符,这就是造成同样错误的原因.

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

我希望这可以帮助别人!