Если я хочу выполнить 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