PHPで簡単なWebAPIを実装してみる
上記URLに記載のソースコードを丸々コピーして、自分の環境で実装しましたが、エラーが起きています。
api.phpで実装したAPIをresult.phpで呼び出すものです。
■api.php <?php // 文字コード設定 header('Content-Type: text/html; charset=UTF-8'); // numが存在するかつnumが数字のみで構成されているか if(isset($_GET["num"]) && !preg_match('/[^0-9]/', $_GET["num"])) { // numをエスケープ(xss対策) $param = htmlspecialchars($_GET["num"]); // メイン処理 $arr["status"] = "yes"; $arr["x114"] = (string)((int)$param * 114); // 114倍 $arr["x514"] = (string)((int)$param * 514); // 514倍 } else { // paramの値が不適ならstatusをnoにしてプログラム終了 $arr["status"] = "no"; } // 配列をjson形式にデコードして出力, 第二引数は、整形するための定数 print json_encode($arr, JSON_PRETTY_PRINT); ■result.php <?php // 文字コード設定 header('Content-Type: text/html; charset=UTF-8'); // numパラメータにセットする値 $num = 10; // WebAPIのURL $url = "http://localhost:1024/api.php?num=${num}"; // URLの内容を取得し、json形式からstdClass形式に変換し取得 $data = json_decode(file_get_contents($url)); // 連想配列で取得したかったら第二引数にtrueを指定↓ // $data = json_decode(file_get_contents($url), true); // dataのstatusがyesだったら(出力に成功したら) if($data->status == "yes") { // 114倍の値をprint print $data->x114; }
エラー内容
Warning: file_get_contents(http://localhost:1024/api.php?num=10): failed to open stream: �Ώۂ̃R���s���[�^�[�ɂ��ċ��ۂ��ꂽ���߁A�ڑ��ł��܂���ł����B in C:\xampp\htdocs\php\server1\result.php on line 10 Notice: Trying to get property 'status' of non-object in C:\xampp\htdocs\php\server1\result.php on line 15
エラー内容ver2
result.phpの
header('Content-Type: text/html; charset=UTF-8');を
header('Content-Type: application/json; charset=UTF-8');に変えた場合
<br /> <b>Warning</b>: file_get_contents(http://localhost:1024/api.php?num=10): failed to open stream: �Ώۂ̃R���s���[�^�[�ɂ��ċ��ۂ��ꂽ���߁A�ڑ��ł��܂���ł����B in <b>C:\xampp\htdocs\php\server1\result.php</b> on line <b>10</b><br /> <br /> <b>Notice</b>: Trying to get property 'status' of non-object in <b>C:\xampp\htdocs\php\server1\result.php</b> on line <b>15</b><br />
何がおかしいのか、全く分かりません。file_get_contentsが原因だとは思いますが、解消方法が分かりません。
result.phpを使わず、http://localhost/php/server1/api.php?num=10と、ブラウザに直接urlを入力するとJSONを取得できるので、result.phpに誤りがあるのだと思います。
お手数ですが、ご教授のほどよろしくお願いします。
回答2件
あなたの回答
tips
プレビュー