17

コードの何が問題になっていますか? テストサーバーでコードを実行したところ、コードは機能しましたが、実稼働サーバーにアップロードすると、

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;

?>
4

6 に答える 6

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);
}
于 2011-02-09T19:37:50.230 に答える
12

PHP 5.3 以降、特にワードプレスのテーマでこのエラーが発生した場合は、サーバー上の実際のファイルのフォーマットを確認することをお勧めします。

このエラーが発生し、サーバーでエラーをスローする PHP ファイルを表示したところ、改行がなく、事実上 1 行に縮小されていました。

何らかの理由で、ファイルをアップロードしたときに Filezilla が改行を取り除き、これが同じエラーの原因でした。

Filezilla の転送タイプをバイナリ (転送 > 転送タイプ > バイナリ) に変更し、wordpress テーマを再アップロードすることで、問題が解決しました!

これが誰かに役立つことを願っています!

于 2015-08-18T04:22:50.660 に答える
4

コールバック関数を別の名前付き関数に抽出し、名前で参照してみてください。

于 2011-02-09T19:38:49.517 に答える
3

create_function を探していると思います: http://php.net/manual/en/function.create-function.php

create_function は php4 と php5 の両方でサポートされています

于 2011-02-09T19:38:11.243 に答える