-2

1つのパラメータを持つ1つの関数があります。この関数をブラウザから呼び出したい。どうすれば電話できますか?それは私に空白を与えています。関数の外で同じコードを書くと、それは機能しています。私を助けてください。このリンクをブラウザ「domainname://ipaddress/test.php/mywebservice」に渡します

私はこのコードを使用しています:

<?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; } ?>

私がしわがれた場合:

<?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":""},]

どちらが正しい。

4

1 に答える 1

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から呼び出す関数を直接指定する方法はありません。上記のように、このような機能が必要な場合は、自分で実装する必要があります。

編集:

私はあなたの質問が何であるかを理解していると思います。書き換えエンジンを使用します。.htaccessに追加します

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

これにより、次のようなクエリが書き換えられます。

http://domain/page.php/myFunction?param=value

http://domain/page.php?function=myFunction¶m=value

myFunctionは、呼び出し不可能な「asd / asd / asd」(「page.php / asd / asd / asd?asd」などのリクエストの場合)になることもあることに注意してください。

于 2012-09-28T06:24:58.757 に答える