2009-08-07 19 views
0

私は、URIに基づいて、特定の関数を呼び出す単純なPHPスクリプトを作成するために探しています。URIに基づいてPHP関数を呼び出す

代わりにif文の束を有するので、私が訪問できるようにしたいと思います:

は/ dev /ビュー/記事/

、それは私が作成した「ポスト」関数を呼び出しますPHPスクリプト。

ご協力いただければ幸いです。

ありがとうございます!

答えて

1

call_user_func機能のドキュメントをご覧ください。

$functions['/dev/view/posts'] = 'function_a'; 
$functions['/dev/view/comments'] = 'function_b'; 
$functions['/dev/view/notes'] = 'function_c'; 

$uri = '/dev/view/comments'; 

call_user_func($functions[$uri]); 
+0

これは私が探していたものです。どうもありがとう! –

3

フレームワークを使用していますか?彼らはあなたのためにこの種のことをします。

これを行うには、Apacheでmod_rewriteを使用する必要があります。 view.php

switch($_REQUEST['page']) 
{ 
    case 'posts': 
     // call posts 
     echo posts(); 
     break; 
} 

EDITをして /dev/view.php?page=posts

RewriteEngine On 
RewriteRule ^/dev/view/posts/(.*)$ /dev/view?page=$1 

にそれを

基本的にあなたが取るの/ dev /ビュー/ポスト と書き換えますこの呼び出しは "ページ"と呼ばれていました。

おそらくフレームワークを使用している可能性がありますセキュリティの意味合いです。非常に簡単にこれを行うことができます:

if (array_key_exists('page',$_REQUEST)) 
{ 
    $f = $_REQUEST['page']; 
    if (is_callable($f)) 
    { 
     call_user_func($f); 
    } 
} 

メモこれを行うには、より良い方法があります。あなたはフレームワークを使用する必要があります!

+0

私はmod_rewriteの使用について知っていますが、問題はそれぞれの 'posts'と 'posts'機能を一致させるコードを書く必要があることです。フレームワークのアイデアを使って、posts()関数を書いてから/ dev/view/posts /に移動すれば、その関数が呼び出されます。 –

+0

これをマップするフロントコントローラーが必要です。どのフレームワークを使用していますか? –

+0

'/'文字をエスケープする必要はありません。 – Gumbo

0

あなたが探しているものは、Webサーバー上のURL書き換えの一形式です。たとえば、Apacheを使用している場合は、mod_rewriteを検索する必要があります。

RewriteEngine On 
RewriteRule ^/dev/view/posts/(.*)$ /posts.php?id=$1 

しかし、私はあなたが複数の投稿のURLのためにこれを使用できるように、末尾のポストIDまたは類似を持つように欠けていると仮定している:あなたのルールはどのように見えるかの例。

関連する問題