web-dev-qa-db-fra.com

Erreur d'analyse: erreur de syntaxe, ligne T_FUNCTION 10 inattendue?

Quel est le problème avec mon code? J'ai exécuté le code sur mon serveur de test et le code a fonctionné, mais lorsque je le télécharge sur mon serveur de production, j'obtiens

Parse error: syntax error, unexpected T_FUNCTION in /hermes/bosweb/web013/b130/ipg.acrsflcom/darayngedbeats/gentest.php on line 10

voici mon code

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

?>
16
acrs

L'erreur est probablement due à

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

Vous utilisez probablement PHP 5.2 ou une version antérieure, qui ne prend pas en charge les fermetures. Vous pouvez savoir quelle version de PHP vous utilisez - phpinfo() .

Vous devrez probablement mettre à niveau vers PHP 5.3+, ou utiliser create_function , ou écrire une fonction statique et la passer en tant que - rappel .

Voici un exemple de la dernière option, utilisant une classe simple pour stocker l'état de $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);
}
32
meagar

Pour tous ceux qui obtiennent cette erreur sur PHP 5.3+ et surtout avec un thème wordpress, je recommanderais de jeter un œil au formatage des fichiers réels sur le serveur) .

Lorsque j'ai rencontré cette erreur et vu les fichiers PHP lançant l'erreur sur le serveur, ils n'avaient pas de sauts de ligne et étaient effectivement réduits à une seule ligne.

Pour une raison quelconque, Filezilla a supprimé les sauts de ligne lorsque j'ai téléchargé les fichiers et c'est ce qui provoquait cette même erreur.

En changeant le type de transfert dans Filezilla en Binaire (Transfert> Type de transfert> Binaire) et en téléchargeant à nouveau le thème wordpress, cela a résolu mon problème!

J'espère que ça aidera quelqu'un!

12
Pakage

essayez d'extraire votre fonction de rappel dans une fonction nommée distincte et de vous y référer par son nom.

4
Scott M.

Je pense que vous recherchez create_function: http://php.net/manual/en/function.create-function.php

create_function est pris en charge à la fois en php4 et php5

3
Foo Bah

À l'heure actuelle, cette question est principalement obsolète car 5.3 existe depuis longtemps, mais en plus des points soulevés par les autres réponses, je voudrais souligner que ce que vous essayez de faire peut déjà être fait en utilisant strtr() :

$new = strtr($old, array(
  ':' => '%3A',
  '?' => '%3F',
  '=' => '%3D',
  '&' => '%26',
  '%' => '%25',
));
2
Ja͢ck