Еще одна проблема с заменой eregi для навигации по веб-страницам
Мои хосты недавно обновили свой 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 ().
preg_match () выводит мою страницу ошибки и файл news.txt из Coranto, но не переходит на страницы, как в приведенных выше ссылках. Что я могу сделать здесь, чтобы заставить это работать?
stristr () не дает мне предупреждений, но не перемещается по странице и выводит только мою новостную страницу Coranto. Если это будет лучше, что я могу сделать, чтобы заставить эту работу?
Что мне нужно сделать, чтобы это исправить? Я полностью потерян.:(
1 ответ
ereg(i) считается устаревшим. Вы должны использовать preg_match для регулярных выражений, так как preg быстрее, чем другой движок. Кроме того, если вы хотите, чтобы он заканчивался на ".shtml", это регулярное выражение неверно, и вам не нужно прибегать к регулярным выражениям. Заканчивается на.shtml "^*. Shtml$". Если вы решите использовать preg_match, все регулярные выражения preg_match, такие как perl, будут заключены в "/" (косая черта), поэтому правильное регулярное выражение будет выглядеть так:
preg_match("/^.*\.shtml$/", $load)
Но на лучшее решение для "заканчивается с.shtml". Как правило, вы не должны использовать регулярные выражения, если только ситуация на самом деле не вызывает их (они значительно медленнее, чем использование substr и соответствует последней части строки), такие простые совпадения не подходят.
if (substr($test, sizeof($load) - 7, 6 )) == '.shtml') { ... }