Нужно ли использовать substr () для вызова каталога или мне нужен другой код? - PullRequest
0 голосов
/ 23 октября 2011

Все в этом файле настроено таким образом, что $ _GET ['q'] выводит имя основного домена, а остальные каталоги на сайте отображаются следующим образом: else if (substr($_GET['q'], 0, 7) == 'quotes/') Если бы я хотел иметь папку под названием: Ultimate Deals-And-Low-Price, я бы использовал

else if (substr($_GET['q'], 0, 30) == 'ultimate-deals-and-low-prices/')

Имеет ли это смысл, или я бы назвал мой каталог по-другому, без необходимости запрашивать у php подстроку имени файла каталога. Я понимаю, что это то, что делает подстрока, но я видел, что она использовалась только для символов меньше 10. Если бы в моем каталоге было больше символов, я бы все еще использовал подстроку?

Это начало оператора if в этом документе:

require_once(getcwd() ."/db/db_pagetitle.php");
print get_page_title($_GET['q']);
if (isset($_GET['q']) && $_GET['q']) {
    if (file_exists(getcwd() .'/pages/'. $_GET['q'] .'.php')) {
        require_once(getcwd() .'/pages/'. $_GET['q'] .'.php');

чем это идет в

else if (substr($_GET['q'], 0, 7) == 'quotes/') 

Как мне позвонить в мой каталог?

Спасибо

Ответы [ 3 ]

0 голосов
/ 23 октября 2011

Вы можете использовать систему обнаружения, если собираетесь использовать несколько ключевых слов.

$match[]='ultimate-deals-and-low-prices/';
$match[]='users/';
$match[]='imgs/';
foreach($match as $k=>$v){
$l=strlen($v);
$s=substr($_GET[q],0,$l);
if ($v==$s) //Code to run...
}
0 голосов
/ 24 октября 2011

Что случилось с strpos?

<?php

if (file_exists($sanitizedPath)) {

} elseif (strpos($_GET['q'], "ultimate-deals-and-low-prices/") === 0) {

} elseif (strpos($_GET['q'], "some-other-directory/") === 0) {

}

меньше печатать, меньше подвержено ошибкам, быстрее.

0 голосов
/ 23 октября 2011

Вы все еще можете использовать substr, нет проблем с более чем 10 символами :) Другими словами, вы можете использовать именно тот код, который вы разместили (если не возражаете против ввода): else if (substr($_GET['q'], 0, 30) == 'ultimate-deals-and-low-prices/')

Но, если есть некоторая общая логика для всех папок (например, cd - вхождение в нее или поиск в ней файла), вам не нужно писать ветку else для каждой папки, вы можете просто используйте что-то вроде:

if (isset($_GET['q']) && $_GET['q']) {
    if (file_exists(getcwd() .'/pages/'. $_GET['q'] .'.php')) {
        require_once(getcwd() .'/pages/'. $_GET['q'] .'.php');
    } else if (is_dir(getcwd() . '/pages/' . $_GET['q'])) {
        // do whatever you want to do with the folder
    }
}

Если бы вы написали больше своего кода, было бы легче понять, что вы пытаетесь сделать.

...