Ошибка синтаксического анализа: синтаксическая ошибка, неожиданная строка функции T 10?
что не так с моим кодом? Я запустил код на своем тестовом сервере, и код работал, но когда я загружаю его на свой рабочий сервер, я получаю
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;
?>
5 ответов
ошибка, вероятно, вызвана
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);
}
для тех, кто получает эту ошибку на PHP 5.3+ и особенно с темой wordpress, я бы рекомендовал взглянуть на форматирование фактических файлов на сервере.
когда я столкнулся с этой ошибкой и просмотрел файлы PHP, бросающие ошибку на сервер, у них не было разрывов строк и они были эффективно уменьшены до одной строки.
по какой-то причине Filezilla удалил разрывы строк, когда я загрузил файлы, и это было то, что вызывало эту же ошибку происходить.
изменив Тип передачи в Filezilla на Binary (Transfer > Transfer Type > Binary) и повторно загрузив тему wordpress, это исправило мою проблему!
надеюсь, это кому-то поможет!
попробуйте извлечь функцию обратного вызова в отдельную именованную функцию и ссылаться на нее по имени.
Я думаю, что вы ищете create_function: http://php.net/manual/en/function.create-function.php
create_function поддерживается как в php4, так и в php5
к настоящему времени этот вопрос в основном устарел, потому что 5.3 существует уже давно, но помимо вопросов, поднятых другими ответами, я хотел бы отметить, что то, что вы пытаетесь сделать, уже можно сделать с помощью strtr()
:
$new = strtr($old, array(
':' => '%3A',
'?' => '%3F',
'=' => '%3D',
'&' => '%26',
'%' => '%25',
));