-1

test.php には関数 a と関数 b があり、$_GET の「act」のパラメータによって呼び出され、「act」の値がない場合はデフォルト値を持ちます。

<?php
   if(isset($_GET['act'])&&$_GET['act']){
     $act=$_GET['act'];
   }else{
     $act='a';
   }
   function a(){
    echo('this is a');      
   }
   function b(){
        echo('this is b');
  }
   $act();
?>

以下のコードを実行すると、test.php で関数 a と関数 b が呼び出されます。

<?php
   include ("test.php");
   b();
?>

関数bのみを呼び出すにはどうすればよいですか?「act」のデフォルト値を変更したくありません。他のシステムで使用されるためです。

4

2 に答える 2

2

2 つの関数を呼び出すように指示しています。include("test.php") すると、最後の行で関数 a が呼び出されます。

$act();

次に、他のソース ファイルで、明示的に b() を呼び出しています。

b();

これらの呼び出しのいずれかを削除する必要があります。

ところで、あなたがしていることは非常に危険であり、入力をサニタイズしていません。簡単な例として、2 番目のソース ファイルの名前が second.php で、ユーザーが次の URL を入力したとします。

http://yourserver.com/second.php?act=phpinfo

彼らは、あなたがロードしたすべてのモジュールなどを含む、あなたの Apache インストール データのプリントアウトを取得します。実際にチェックして検証する法的措置の明示的なホワイトリストが必要です。

于 2012-12-29T01:42:46.970 に答える
1

インクルードされたファイル内でいくつかの変数/定数を定義することができ、それが存在する場合は呼び出さないでください$act()

<?php
   if(isset($_GET['act'])
       &&
      $_GET['act'] 
       && 
      in_array($_GET['act'],array('a','b'))
   ){
     $act=$_GET['act'];
   }else{
     $act='a';
   }
   function a(){
    echo('this is a');      
   }
   function b(){
        echo('this is b');
  }
   if(!defined('FOO')){
     $act();
   }
?>

.......

<?php
   if(!defined('FOO')){
     define('FOO',true);
   }

   include ("test.php");
   b();
?>
于 2012-12-29T02:11:50.140 に答える