0

私のホストは最近、PHP を 5.3 に (警告なしに) 更新したため、インデックス ページのページ ナビゲーションのコードを置き換える必要があります。これは私が現在使用しているものです:

<? if (eregi(".shtml", $load)) {if (!@readfile("$load")) { readfile("error.shtml"); }  } if (!eregi(".shtml", $load)) {if (!@readfile(include("/home/content/j/p/l/jplegacy/html/coranto/news.txt") )) ;}?>

これは、ナビゲートするリンクのサンプルとして使用するものです。

<a href="?load=archive/archive.shtml">Archive</a>
<a href="?load=about.shtml">About Us</a>

preg_match() と stristr() という 2 つの異なる手法を調べました。

preg_match() は、Coranto からエラー ページと news.txt ファイルを出力しますが、上記のリンクのようなページに移動しません。その作業を行うためにここで何ができますか?

stristr() は警告を表示しませんが、ページをナビゲートせず、Coranto ニュース ページのみを出力します。これがより良い場合、これを機能させるために何ができますか?

これを修正するにはどうすればよいですか? 私は完全に迷っています。:(

4

1 に答える 1

0

ereg(i) は非推奨と見なされます。preg は他のエンジンよりも高速であるため、正規表現には preg_match を使用する必要があります。また、正規表現が間違っている「.shtml」で終わりたい場合は、正規表現に頼る必要はありません。.shtml で終わるのは「^*.shtml$」です。preg_match の使用を選択した場合、perl などのすべての preg_match 正規表現は「/」(スラッシュ) で囲まれるため、正しい正規表現は次のようになります。

 preg_match("/^.*\.shtml$/", $load)

しかし、「.shtmlで終わる」ためのより良い解決策に進みます。通常、正規表現は、実際に必要な場合を除いて使用しないでください (正規表現は、substr を使用して文字列の最後の部分を照合するよりも大幅に遅くなります)。そのような単純な一致は対象外です。

 if (substr($test, sizeof($load) - 7, 6 )) == '.shtml') { ... }
于 2012-08-23T17:17:50.873 に答える