2012-09-28 2 views
-2

У меня есть 1 функция, которая имеет 1 параметр. Я хочу вызвать эту функцию из браузера. Как я могу позвонить? Это дает мне пустое. Когда я пишу такую ​​же внешнюю функцию кода, она работает. Пожалуйста, помогите мне. Я передаю эту ссылку в браузер "имя_домен: //ipaddress/test.php/mywebservice"Php webservice - вызов параметризованной функции из браузера

Я использую этот код:

<?php 

$json = '{"foo-bar": 12345}'; 

$obj = json_decode($json); 
//print $obj->{'foo-bar'}; // 12345 
switch($_GET['function']) { 
case 'specificFunction': 
    abc(); 
} 

function abc 
{ 
$con = mysql_connect("localhost","uname","Password"); 

if (!$con) 

{ 

die('Could not connect: ' . mysql_error()); 

} 
//print_r($con); 

mysql_select_db("roster", $con); 



$query = "select * from rates"; 
$rs = mysql_query($query) or die($query); 
//print_r($rs); 
while($row=mysql_fetch_assoc($rs)){ 
$record[] = $row; 
} 

$data = json_encode($record); 

header('Cache-Control: no-cache, must-revalidate'); 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
header('Content-type: application/json'); 
echo $data; 
} 
?> 

Результат:

{'foo-bar'}; // 12345 switch($_GET['function']) { case 'specificFunction': abc(); } function abc { $con = mysql_connect("localhost","uname","Password"); if (!$con) { die('Could not connect: ' . mysql_error()); } //print_r($con); mysql_select_db("roster", $con); $query = "select * from rates"; $rs = mysql_query($query) or die($query); //print_r($rs); while($row=mysql_fetch_assoc($rs)){ $record[] = $row; } $data = json_encode($record); header('Cache-Control: no-cache, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Content-type: application/json'); echo $data; } ?> 

Если я wirte :

<?php 

$json = '{"foo-bar": 12345}'; 

$obj = json_decode($json); 
//print $obj->{'foo-bar'}; // 12345 

$con = mysql_connect("localhost","uname","Password"); 

if (!$con) 

{ 

die('Could not connect: ' . mysql_error()); 

} 
//print_r($con); 

mysql_select_db("roster", $con); 



$query = "select * from rates"; 
$rs = mysql_query($query) or die($query); 
//print_r($rs); 
while($row=mysql_fetch_assoc($rs)){ 
$record[] = $row; 
} 

$data = json_encode($record); 

header('Cache-Control: no-cache, must-revalidate'); 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
header('Content-type: application/json'); 
echo $data; 

?> 

Result : 



[{"Month":"July","Year":"2012","Rate":"1.20%","Short":"0.24%","Mid":"0.92%","Long":"2.30%","RateUnFormatted":"0.012","LastUpdated":"2012-09-01 01:00:00","PublishFlag":"M"},{"Month":"June","Year":"2012","Rate":"1.20%","Short":"0.23%","Mid":"1.07%","Long":"2.64%","RateUnFormatted":"0.012","LastUpdated":"0000-00-00 00:00:00","PublishFlag":""},] 

Что является правильным.

+0

Нет кода => нет ответа. Что в этом такого сложного? – arkascha

+0

Вот код..Sorry –

+0

изменен мой ответ – SinistraD

ответ

1

Позвоните мне из ... (позвольте мне процитировать вас) «внешняя функция».

например: page.php:

include "file-containing-my-function.php"; 
$param = $_GET['param']; 
myFunction($param); 

Вы можете использовать более общий и гораздо менее безопасный метод с передачей имени функции:

с просьбой ищет что-то вроде этого: page.php?action=myFunction&param=value (или с переписывания двигателем вы можете достичь этого же URL из ://domain/page/myFunction/value запроса)

page.php:

$callback = $_GET['action']; 
$param = $_GET['value']; 
echo $callback($param); 

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

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

EDIT:

Я думаю, что я понимаю, что ваш вопрос. Используйте переписать двигатель. Добавить в ваш .htaccess

RewriteEngine on 
RewriteCond %{QUERY_STRING} (.*) 
RewriteRule ^test.php/(.*)?$ test.php?function=$1&%1 [L] 

Это будет переписать запрос типа:

Http:? //domain/page.php/myFunction парам = значение

в

http: //domain/page.php? function = myFunction & param = значение

Обратите внимание, что myFunction также может стать «asd/asd/asd» (для запроса типа «page.php/asd/asd/asd? Asd»), который не является вызываемым.

+0

Извините, что задал глупый вопрос ... но что мне делать? Какие изменения я должен внести в свой код? –

+0

У меня очень мало знаний на стороне php. –

+0

Например, закройте переключатель. Кроме этого, PHP выглядит нормально. Код, который я дал, может редактировать, поскольку механизм перезаписи переходит в .htaccess. Google для получения дополнительной информации. Но вам это не нужно. Только если вам нужны красивые URL-адреса. Просто используйте ** http: //domain/page.php? Function = myFunction & param = value **, чтобы проверить свой скрипт. – SinistraD

Смежные вопросы