Вызывать функцию PHP из URL-адреса?

Если я хочу выполнить php-скрипт, я просто указываю браузер на www.something.com/myscript.php

Но если я хочу выполнить определенную функцию внутри myscript.php , есть ли способ? что-то вроде www.something.com/myscript.php.specificFunction

Благодаря!

Один быстрый способ – сделать что-то вроде

 something.com/myscript.php?f=your_function_name 

затем в myscript.php

 if(function_exists($_GET['f'])) { $_GET['f'](); } 

Но, пожалуйста, за любовь котят, не злоупотребляйте этим.

То, что делает ваш сценарий, полностью зависит от вас. URL-адреса не могут магически заставлять Apache, PHP или какой-либо другой серверный компонент принимать определенное поведение, но если вы напишете свою программу таким образом, что конкретная функция может быть выполнена, это, безусловно, возможно. Возможно, что-то вроде:

 switch($_GET['function']) { case 'specificFunction': specificFunction(); } 

Затем вы можете посетить myScript.php?function=specificFunction

Будьте предельно осторожны, чтобы конкретно перечислять каждую допустимую функцию . Вы не должны просто принимать параметр $_GET['function'] и слепо выполнять любую функцию, о которой он говорит, поскольку это может представлять огромный риск для безопасности.

Вам придется каким-то образом разоблачить его. Это связано с тем, что разоблачение всех общедоступных методов будет представлять угрозу безопасности.

example.php

 <?php function CalculateLength($source) { return strlen($source); } if(isset($_GET['calculate-length']) && isset($_GET['value']){ die(CalculateLength($_GET['value'])); } ?> 

Затем просто позвоните:

 http://www.example.com/Example.php?calculate-length&value=My%20example 

Попробуй это

 $urlParams = explode('/', $_SERVER['REQUEST_URI']); $functionName = $urlParams[2]; $functionName($urlParams); function func1 ($urlParams) { echo "In func1"; } function func2 ($urlParams) { echo "In func2"; echo "<br/>Argument 1 -> ".$urlParams[3]; echo "<br/>Argument 2 -> ".$urlParams[4]; } 

и URL-адреса могут быть ниже
http://domain.com/url.php/func1
http://domain.com/url.php/func2/arg1/arg2

Вы можете сделать что-то вроде этого (не рекомендуется по соображениям безопасности): http://www.exampe.com/myscript.php?run=getNames

тогда:

 <?php if (isset($_GET['run']) && function_exists($_GET['run'])){ echo $_GET['run'](); } else { echo 'Function not Found'; } 

Вам лучше было бы использовать php-класс вместо того, чтобы пытаться вызвать функцию в глобальном пространстве имен, потому что они могли бы вызвать потенциально опасную функцию или вызвать функцию, в которой вы не хотите, чтобы результат был получен:

 <?php class PublicView { function get_page(){ echo 'hey'; } } if (isset($_GET['run']) && method_exists('PublicView',$_GET['run'])){ $view = new PublicView(); $view->$_GET['run'](); } else { echo 'Function not found'; } 

Это также не позволило бы вызвать частные функции класса и т. Д.

Ну вот. Это очень просто. Он вызывает только определенные функции и выполняет функцию по умолчанию.

  <?php if (isset($_GET['p'])) $linkchoice=$_GET['p']; else $linkchoice=''; switch($linkchoice){ case 's' : firstfunc(); break; case 'second' : secondfunc(); break; default : echo 'no function'; } ?> 

вы можете поместить вызов функции в скрипт.

туРипсЫоп ();

function myFunction () {….}

Вы не можете сделать это, не добавляя специальный код к самому файлу PHP, чтобы захватить имя функции из URL-адреса и вызвать его.

Есть несколько способов.

Один из способов – передать имя функции в качестве параметра GET, и в зависимости от его существования вы можете вызвать функцию.

Вы также можете получить защиту , проверьте HTTP-ссылку. И выполняйте только функции, если реферер является тем же самым доменом, что и сам. Возможно, сравнить и проверить другие вещи.

Но должно быть много способов проверить, что запрос поступает с одного и того же веб-сайта, поскольку функция должна быть выполнена.

Используйте конструктор вашего PHP-класса:

 <?php class YourClass { function __construct() { $functionName = myFunction; if (isset($_GET['functionName']) && $_GET['functionName'] == $functionName)){ myFunction(); } else { echo "Function not found"; } } } 
  if (isset($GET[param_name])){ if($GET[param_name] === value) { function 1... } else if { function 2... } } 

Я использую это на своем веб-сайте. Чтобы использовать это, просто отформатируйте свой URL-адрес следующим образом: www.something.com/myscript.php?function=myFunction&arg=foo&otherarg=bar Не имеет значения, что вы называете args в URL- www.something.com/myscript.php?function=myFunction&arg=foo&otherarg=bar и вы можете иметь столько аргументов, сколько хотите.

 <?php if(isset($_GET["function"])&&!empty($_GET)){ $function = $_GET["function"]; unset($_GET["function"]); $canexec = array( "function name that can be executed", "function name that can be executed", "function name that can be executed" ); if(!in_array($function,$canexec)){ die("That function cannot be executed via url."); } $args = array(); if(count($_GET)>0){ //handle args foreach($_GET as $arg){ array_push($args,$arg); } } $result = call_user_func_array($function,$args); //this part is only necessary if you want to send a response to a http request. if(is_bool($result)){ die(($r)?'true':'false'); } else if(is_array($result)){ die(json_encode($result)); } else { die($result); } } myFunction($foo,$bar){ echo $foo." ".$bar; } ?> с <?php if(isset($_GET["function"])&&!empty($_GET)){ $function = $_GET["function"]; unset($_GET["function"]); $canexec = array( "function name that can be executed", "function name that can be executed", "function name that can be executed" ); if(!in_array($function,$canexec)){ die("That function cannot be executed via url."); } $args = array(); if(count($_GET)>0){ //handle args foreach($_GET as $arg){ array_push($args,$arg); } } $result = call_user_func_array($function,$args); //this part is only necessary if you want to send a response to a http request. if(is_bool($result)){ die(($r)?'true':'false'); } else if(is_array($result)){ die(json_encode($result)); } else { die($result); } } myFunction($foo,$bar){ echo $foo." ".$bar; } ?> 
 //Register Hooks $hooks = ['lang','score']; function parseHook() { if (isset($_GET['_h'])) { return $hook = explode('/', filter_var(rtrim($_GET['_h'], '/'), FILTER_SANITIZE_URL)); } else { return false; } } $hook = parseHook(); if ($hook && in_array($hook[0],$hooks) && function_exists($hook[0])) { $callMe = $hook[0]; unset($hook[0]); $params = $hook ? array_values($hook) : []; $callMe($params); } function lang($params) { $Lib = new Lib(); $Lib->printWithPreTag($params); } function score($params) { $Lib = new Lib(); $Lib->printWithPreTag($params); } //&_h=hookname/par1/par2/par3 с //Register Hooks $hooks = ['lang','score']; function parseHook() { if (isset($_GET['_h'])) { return $hook = explode('/', filter_var(rtrim($_GET['_h'], '/'), FILTER_SANITIZE_URL)); } else { return false; } } $hook = parseHook(); if ($hook && in_array($hook[0],$hooks) && function_exists($hook[0])) { $callMe = $hook[0]; unset($hook[0]); $params = $hook ? array_values($hook) : []; $callMe($params); } function lang($params) { $Lib = new Lib(); $Lib->printWithPreTag($params); } function score($params) { $Lib = new Lib(); $Lib->printWithPreTag($params); } //&_h=hookname/par1/par2/par3 - //Register Hooks $hooks = ['lang','score']; function parseHook() { if (isset($_GET['_h'])) { return $hook = explode('/', filter_var(rtrim($_GET['_h'], '/'), FILTER_SANITIZE_URL)); } else { return false; } } $hook = parseHook(); if ($hook && in_array($hook[0],$hooks) && function_exists($hook[0])) { $callMe = $hook[0]; unset($hook[0]); $params = $hook ? array_values($hook) : []; $callMe($params); } function lang($params) { $Lib = new Lib(); $Lib->printWithPreTag($params); } function score($params) { $Lib = new Lib(); $Lib->printWithPreTag($params); } //&_h=hookname/par1/par2/par3 - //Register Hooks $hooks = ['lang','score']; function parseHook() { if (isset($_GET['_h'])) { return $hook = explode('/', filter_var(rtrim($_GET['_h'], '/'), FILTER_SANITIZE_URL)); } else { return false; } } $hook = parseHook(); if ($hook && in_array($hook[0],$hooks) && function_exists($hook[0])) { $callMe = $hook[0]; unset($hook[0]); $params = $hook ? array_values($hook) : []; $callMe($params); } function lang($params) { $Lib = new Lib(); $Lib->printWithPreTag($params); } function score($params) { $Lib = new Lib(); $Lib->printWithPreTag($params); } //&_h=hookname/par1/par2/par3