1. 程式人生 > >php介面post資料接收不到引數原因

php介面post資料接收不到引數原因

1.檢查頭資訊content-type是不是為“content-type:application/x-www-form-urlencoded" 這種傳輸是以表單的方式提交資料php使用$_POST方式接受。

2.如果頭資訊content-type是不是為“content-type:application/json"這種傳輸是以json方式提交資料,php需要使用file_get_contents("php://input")獲取輸入流的方式接受
 

初學php,用echo $_POST["variable"]和var_dump($_POST) 都獲取不到post資料。

解決方法如下:

1.找到php.ini 配置檔案,查詢enable_post_data_reading變數,確保其開啟狀態,並且該語句前面的分號要去掉(有分號的語句是註釋語句):

2.觀察你的執行php的瀏覽器地址,會發現在PhpStorm中開啟瀏覽器使用的服務埠號是63342(URL是localhost:63342/這樣的形式)


因此問題的原因在於:PhpStorm預設使用的是自帶的內部伺服器,卻不使用xampp裡面的apache伺服器。phpStorm這個內建伺服器使用63342埠,而且伺服器內部有問題,導致POST方法異常;而如果把專案放在Apache伺服器的工作目錄下,在位址列輸入localhost,此時使用的是Apache伺服器,預設埠號為80,Apache伺服器可以正常執行程式。

既然PhpStorm內部伺服器有問題,那解決方法就是想辦法不使用內部伺服器。有兩種方法:
1.將專案建立在Apache伺服器的工作目錄下,每次執行時在瀏覽器位址列直接輸入localhost地址

2.如果仍希望通過從PhpStorm中開啟瀏覽器除錯程式,可以通過更改配置實現:

(1)首先將apache伺服器目錄對映到本地目錄

做法如下:

1. 找到 /xampp/apache/conf/httpd.conf 檔案

2. 找到 <IfModule alias_module> </ifModule> 程式碼塊

3. 在<IfModule alias_module>的子級加上如下程式碼:

# /phpworkspace/ : 其它磁碟上目錄的別名, 就是你想對映過來的目錄的別名
# "E:/phpworkspace/" : 這個是目錄的絕對路徑
Alias /phpworkspace/ "E:/phpworkspace/"
# 現在就可以通過 //localhost/phpworkspace/ 訪問到 E盤下phpworkspace資料夾裡的專案了
4. 
在與 <ifModule alias_module> 同級的地方加上一段程式碼, 如下:

<Directory "E:/phpworkspace/">
    AllowOverride All
    Options Indexes FollowSymLinks Includes ExecCGI
    Require all granted
</Directory>

完工. 現在重啟Apache, 訪問 : http://localhost/phpworkspace/ 就可以了

(2)然後在PhpStorm中,依次找到File->Settings->Build, Execution, Deployment->Deployment,初始是空的,點選綠色的加號新增本地伺服器,名字localhost就好了,Type選擇In place:

建立完成後,右側Connection標籤下預設的設定已經將伺服器配置為80埠下的Apache伺服器,即http://localhost

將其改成你對映到本地專案的工作目錄:


Mappings標籤下的Local path設定成你本地專案的目錄:


此時從PhpStorm中點選瀏覽器,訪問的URL已經沒有了63342埠這個欄位,而是使用了本地Apache伺服器,相應的表單資料也可以正常接收了

 

更多問題加Q群討論:565191947