本魯在很久以前有使用PHP寫過一些網頁 所以大概知道 GET 跟 POST 的用法 但那是在大家還把 HTML JS 跟PHP 混在一起寫的年代.....
最近心血朝來又回來玩PHP但是發現現在好像很流行寫 API 所以決定開始來學習XD
目前學習到使用 file_get_contents 來獲取請求所附帶的資料
$data = file_get_contents("php://input");
if(!isset($data))
return null;
$jsonData = json_decode($data , true);
foreach( $jsonData as $k =>$v)
{
echo "$k / $v<br>";
}
但是 file_get_contents 拿不到從網址帶來的GET參數
(GET參數 使用 $_Get['參數']取得這個本魯了解 XD)
想問的是 是否有發送 GET請求 然後附帶的參數 用另外的方法讓 file_get_contents 可以取得呢?
如果說為什麼要這樣做 大概是因為想要讓取資料的方式 有一致性吧@@
另外 CODE怎麼讓他高亮= =?
三個檔案, 一個 api, 另外兩個用不同方法送 request
api.php
$input = file_get_contents('php://input');
echo "method: {$_SERVER['REQUEST_METHOD']}\n";
echo "content type: {$_SERVER['CONTENT_TYPE']}\n";
if (empty($input)) {
echo "no data";
} else {
$data = json_decode($input, true);
echo "json value = ", $data['value'];
}
curl.php
$json = json_encode(['value' => 'from curl']);
$options = [
CURLOPT_URL => "http://localhost/api.php",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => $json,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_CUSTOMREQUEST => "GET"
];
$ch = curl_init();
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
curl_close($ch);
echo $result, "\n";
stream.php
$client = stream_socket_client("tcp://localhost");
$json = json_encode(['value' => 'from stream_socket_client']);
$headers = [
"GET /api.php HTTP/1.0",
"Content-Type: application/json",
"Content-Length:" . strlen($json)
];
$request = implode("\r\n", $headers) . "\r\n\r\n" . $json;
fwrite($client, $request);
$reply = stream_get_contents($client);
fclose($client);
$body = substr($reply, strpos($reply, "\r\n\r\n") + 4);
echo "result: {$body}\n";
現在的入門者,學習程式的態度只求快速可使用,
始終沒有理解背後這樣操作的實質意涵,
那不叫寫程式,只是敷衍交代而已,
如果從態度上就犯了致命錯誤,學什麼都只做表面功夫,
無法真正的學習到一項技能