web-dev-qa-db-ja.com

解析エラー:構文エラー、予期しないT_FUNCTION行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;

?>
16
acrs

エラーの原因はおそらく

_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);
}
_
32
meagar

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

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

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

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

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

12
Pakage

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

4
Scott M.

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

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

3
Foo Bah

5.3が長い間使われているので、この質問は今ではほとんど使われていませんが、他の回答で指摘された点に加えて、あなたがやろうとしていることはすでに strtr()

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