我的代码出了什么问题?我在我的测试服务器上运行代码并且代码工作正常但是当我将其上传到我的生产服务器时我得到了
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;
?>
答案 0 :(得分: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
,或编写静态函数并将其作为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);
}
答案 1 :(得分:12)
对于在PHP 5.3+上出现此错误的人,尤其是使用wordpress主题,我建议您查看服务器上实际文件的格式。
当我遇到此错误并查看在服务器上抛出错误的PHP文件时,它们没有换行符并且被有效地缩小为一行。
出于某种原因,Filezilla在我上传文件时删除了换行符,这就是造成同样错误的原因。
通过将Filezilla中的传输类型更改为二进制(传输&gt;传输类型&gt;二进制)并重新上传wordpress主题,这解决了我的问题!
我希望这有助于某人!
答案 2 :(得分:4)
尝试将回调函数提取到一个单独的命名函数中,并按名称引用它。
答案 3 :(得分:3)
我认为您正在寻找create_function:http://php.net/manual/en/function.create-function.php
php4和php5都支持create_function
答案 4 :(得分:2)
到目前为止,这个问题已经过时了,因为5.3已经存在了很长时间,但除了其他答案提出的观点之外,我想指出你已经尝试做的事情已经完成了使用strtr()
:
$new = strtr($old, array(
':' => '%3A',
'?' => '%3F',
'=' => '%3D',
'&' => '%26',
'%' => '%25',
));
答案 5 :(得分:0)
PHP Parse error: syntax error, unexpected 'function' (T_FUNCTION)
就我而言,我修复了这个错误,方法是在之前声明的变量末尾添加一个我忘记的分号..