2016-06-07 2 views
1

preg_replace_callback(); не работает на сервере NGINX, но работает на локальном сервере Apache.preg_replace_callback не работает на сервере

И я думаю, что это не ошибка Apache/NGINX,

Я преобразование всех электронных писем от строки к изображению, но его показ некоторых ошибок, как показано ниже.

Warning: preg_replace_callback(): Requires argument 2, 'encode_email', to be a valid callback in /home/abc/public_html/test.php on line 170 

вы можете увидеть мой код здесь:

<?php 
$email_pattern = '/[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/'; 
$text = 'my email is [email protected] and my second is [email protected]'; 
$html = preg_replace_callback($email_pattern, "encode_email", "$text"); 

echo $html; 

function encode_email($matches){ 
    return '<img src="image.php?id='. base64_encode($matches[0]) .'">'; 
} 
?> 
+0

Это маловероятно, что это связано с различием nginx/apache. Разве это может быть разница между версиями PHP на двух системах? – Simba

+0

@Simba Вы можете быть правы, но оба сервера имеют одну и ту же версию PHP, но я думаю, что это некоторая логическая или синтаксическая ошибка. –

+0

Вы уверены, что не хотите использовать 'preg_replace()' ?! – Rizier123

ответ

0

сделать некоторые изменения, как показано ниже:

$text = 'my email is [email protected] and my second is [email protected]'; 
$email_pattern = '/[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/'; 
$html = preg_replace_callback($email_pattern, function ($matches){ 
    return '<img src="image.php?id='. base64_encode($matches[0]) .'">'; 
}, $text); 
echo $html; 

Я надеюсь, что это будет работать.

Смежные вопросы