1. php獲取參數的幾種方法
1.獲取地址欄參數:
$_SERVER['QUERY_STRING'];
2.獲取參數值
//post提交
用$_POST['參數名稱']獲取值
//get 提交
用$_GET['參數名稱']獲取值
//無論是post還是get方式提交都可以用$_REQUEST
用$_REQUEST['參數名稱']獲取值
2. 怎麼讓PHP獲取到JS中參數
後台的php 要這個數字做什麼用.
php只能輸出 數據流 所以 php的變數值可以隨意加插到js 變數裡面 但是 輸出的時候 JS 還沒有被執行, 所以 所以這個 數字是不存在的, 沒有辦法 逆流而上 進入當前正在輸出的php 文件裡面, 需要php 獲取前台屏幕尺寸情況 時 只能先發送一段JS 執行後獲得數據提交到後台, 記錄到 session裡面 才能影響到 下一個PHP文件的輸出,
一般可以在登錄模塊裡面提交 這個數據到後台 ,這樣主程序 就可以使用這個數據了
雖然 php 支持 html css 和 php 代碼混編 , 但是在實際開發時 是嚴格禁止這種情況出現的
3. php 獲取 鏈接上的 參數
var_mp($_GET) ;
這個可以得到一個數組參數
然後根據獲取的值轉字元串,通過正則判斷獲取每個值。
-------------------------
<?php
var_mp($_GET);
?>
得到:
array(1) { ["id"]=> string(2) "64" }
-----------------------------------------
如果地址是:
http://127.0.0.1/vote/test1.php?id=64?cid=456
則應該得到的是:
array(1) { ["id"]=> string(10) "64?cid=456" }
4. 如何獲取PHP命令行參數
如何獲取PHP命令行參數使用 PHP 開發的同學多少都會接觸過 CLI 命令行。經常會有一些定時任務或者一些腳本直接使用命令行處理會更加的方便,有些時候我們會需要像網頁的 GET 、 POST 一樣為這些命令行腳本提供參數。比如在針對某些日期做統計的腳本,就需要傳遞一個日期給它,這樣我們就統計指定日期的一些數據。這類需求應該非常常見,那麼,我們都是如何來接收這些命令行的參數的呢?今天,就來介紹一下這方面的內容。
$argv 獲得所有空格分隔的參數列表這個變數估計是大家用得比較多的一個接參變數了。它是 PHP 為我們准備好的一個固定變數,目的就是獲取傳遞給腳本的參數數組。
print_r($argv); // php 如何獲取PHP命令行參數.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd // Array // ( // [0] => 如何獲取PHP命令行參數.php // [1] => --a=1 // [2] => -b=2 // [3] => -c=3 // [4] => -d=4 // [5] => --e=5 // [6] => ccc // [7] => ddd // )這個數組是以參數間隔的空格進行分隔的。第1個元素是當前運行的腳本文件名,也就是說,不管有沒有參數,這個變數一定會有一個 $argv[0] 表示的是當前的腳本文件名。
在日常的開發需求中,其實使用這個變數就已經夠用了。但是這明顯不會是我們今天的主題,大家注意到上面的代碼中我們有很多參數是 -x=xxx 的形式,這種形式的參數是不是和 Linux 的命令選項非常像,沒錯,這就是我們今天要重點介紹的:從命令行參數列表中獲取選項。
getopt() 從命令行參數列表中獲取選項其實就是這樣一個簡單的函數,我們就可以像 Linux 的命令選項一樣獲取指定的命令值。而且不是像 $argv 按空格進行分隔,命令選項函數會將這些命令選項封裝成數組,組成以選項名為鍵,以等號後面的內容為值的數組,更加方便我們的使用。
// php 如何獲取PHP命令行參數.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt('a:b:c:d:e:f:')); // Array // ( // [b] => 2 // [c] => 3 // [d] => 4 // )是不是很神奇,而且非常直觀吧,我們直接就拿到了 b 、 c 、d 的內容並且是格式非常清晰的鍵值數組形式。有同學要問了,a 和 e 呢?還有後面的 ccc 、 ddd 呢?
首先要說明的是,ccc 和 ddd 不是標準的選項參數,也就是說,這個函數接收的內容是以 - 開頭的選項,所以 ccc 和 ddd 不會在這里輸出,並且需要注意的是,非選項參數會中斷選項參數的獲取,在 ccc 之後如果繼續添加 - 開頭的選項也是無法獲取到的,這個我們後面還會看到。而 -- 開頭的選項參數呢?我們直接看下面的長選項功能。
長選項 // php 如何獲取PHP命令行參數.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt('', ['a:','b:','c:','d:','e:','f:'])); // Array // ( // [a] => 1 // [e] => 5 // )沒錯,getopt() 函數的第二個參數就是定義這種 -- 開頭的長選項的,而且需要注意的是,第一個參數是字元串類型,第二個長選項參數是數組類型的。那麼我們把它們結合起來,就當然可以獲取到全部的參數信息啦!
// php 如何獲取PHP命令行參數.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt('a:b:c:d:e:f:', ['a:','b:','c:','d:','e:','f:'])); // Array // ( // [a] => 1 // [b] => 2 // [c] => 3 // [d] => 4 // [e] => 5 // )OK,參數選項獲取沒問題了吧,細心的同學肯定又發現了一個問題,這個 getopt() 函數的參數中定義的選項名稱後面為啥都要加個冒號?這就涉及到我們的冒號規則了,請直接往下看。
冒號規則getopt() 的前兩個參數都支持一套關於選項獲取的規則:
單獨的字元(不接受值) 後面跟隨冒號的字元(此選項需要值) 後面跟隨兩個冒號的字元(此選項的值可選)我們還是直接通過代碼來看一下。
// 一 // php 如何獲取PHP命令行參數.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt('abcdef')); // Array // ( // [b] => // [c] => // [d] => // ) // 二 // php 如何獲取PHP命令行參數.php -f print_r(getopt('f::')); // Array // ( // [f] => // ) print_r(getopt('f:')); // Array // ( // ) // 三 // php 如何獲取PHP命令行參數.php -f 22 print_r(getopt('f::')); // Array // ( // [f] => // ) print_r(getopt('f:')); // Array // ( // [f] => 22 // ) // 四 // php 如何獲取PHP命令行參數.php -f=22 print_r(getopt('f::')); // Array // ( // [f] => 22 // ) print_r(getopt('f:')); // Array // ( // [f] => 22 // )這一段比較長,我們一塊一塊來看。首先是不帶冒號的 abcdef 寫法,返回的數組中都包含鍵,但沒有值,對應上面的規則就是不接受這些參數選項的值,你傳了這些參數選項也是只有鍵名而內容是空的。
第二段是定義了一個參數,但是不給值,這時,雙冒號 :: 會有鍵名,而單冒號 : 則什麼都沒有。
第三段是空格形式的選項值,雙冒號 :: 有鍵名但沒有值,單冒號 : 鍵值正常。
第四段是等號 = 形式的選項值,單雙冒號都正常接收到鍵值。
選項參數中斷上文中我們提到過參數中斷的問題,就是在選項參數之後如果有一個非選項參數的參數出現,getopt() 就無法再獲取到這個非選項參數後面的所有內容了。
// php 如何獲取PHP命令行參數.php -f=22 aa -b=33 // 選項的解析會終止於找到的第一個非選項,之後的任何東西都會被丟棄。 // Array // ( // [f] => 22 // )通過這個測試可以清晰的看出後面的 b 選項無法獲取。這時,如果我們想知道選項參數在什麼地方或者因為哪個參數而中斷的話,就可以使用 getopt() 函數的第三個參數了。
// php 如何獲取PHP命令行參數.php -f=22 aa -b=33 $optind = null; getopt('f:b:', [], $optind); echo $optind, PHP_EOL; // 返回中斷位置的索引值,2 echo $argv[$optind], PHP_EOL; // 等同於 $argv 的索引順序,aa注釋已經寫得很清晰了,第三個參數會回調一個參數選項中斷位置的索引,並且這個索引是和 $argv 的索引順序位置一致的。
總結說實話,在沒看文檔前真的只知道有一個 $argv 變數可以用來獲取命令行腳本的參數,通過這次學習才發現原來還有一個這么強大的選項參數函數。學習的過程非常簡單,如何運用到真實的項目中才是關鍵所在,加油學習,努力實踐吧!
測試代碼:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96PHP%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0.php
5. php如何獲取帶參數頁面的內容
cURL可以使用URL的語法模擬瀏覽器來傳輸數據,
因為它是模擬瀏覽器,因此它同樣支持多種協議,
FTP,
FTPS,
HTTP,
HTTPS,
GOPHER,
TELNET,
DICT,
FILE
以及
LDAP等協議都可以很好的支持,包括一些:
HTTPS認證,HTTP
POST方法,HTTP
PUT方法,FTP上傳,keyberos認證,HTTP上傳,代理伺服器,cookies,用戶名/密碼認證,
下載文件斷點續傳,上傳文件斷點續傳,http代理伺服器管道,甚至它還支持IPv6,scoket5代理伺服器,通過http代理伺服器上傳文件
到FTP伺服器等等。
這就是我們為什麼要使用cURL的原因!
使用cURL完成簡單的請求主要分為以下四步:
1.初始化,創建一個新cURL資源
2.設置URL和相應的選項
3.抓取URL並把它傳遞給瀏覽器
4.關閉cURL資源,並且釋放系統資源
我們來採集一個頁面,通常情況下,我們會使用file_get_contents()函數來獲取:
像這樣:
<?php
$str = file_get_contents('http://bbs.lampbrother.net');
//或者是:
$str = file("http://bbs.lampbrother.net");
//或者是:
readfile("http://bbs.lampbrother.net");
?>
這樣我們會發現,我們沒有辦法有效地進行錯誤處理,更重要的是我們沒有辦法完成一些高難度的任務:
如:處理cookies,驗證,表單提交,文件上傳等等。
好,現在我們來用代碼完成上述cURL的四步:
<?php
//1.初始化,創建一個新cURL資源
$ch = curl_init();
//2.設置URL和相應的選項
curl_setopt($ch, CURLOPT_URL, "http://www.lampbrother.net/");
curl_setopt($ch, CURLOPT_HEADER, 0);
//3.抓取URL並把它傳遞給瀏覽器
curl_exec($ch);
//4.關閉cURL資源,並且釋放系統資源
curl_close($ch);
?>
6. 如何獲取PHP文件後面的參數
a.php?xx=123
那你這個來說 頁面成功跳轉之後 url里的數據都存放在$_GET數組里 這是超全局變數
無論在類里 還是函數里都可以直接使用 你寫的這個例子正確的獲取方式是$a = $_GET['xx'];
就把123賦值給了$a變數
7. php獲取url傳遞的參數
php頁面裡面
$隨便名字 = $_POST['你html裡面input的name']
就可以獲得
8. php獲取post參數的幾種方式
方法1、最常見的方法是:$_POST['fieldname'];
說明:只能接收Content-Type: application/x-www-form-urlencoded提交的數據
解釋:也就是表單POST過來的數據
方法2、file_get_contents(「php://input」);
說明:
允許讀取 POST 的原始數據。
和 $HTTP_RAW_POST_DATA 比起來,它給內存帶來的壓力較小,並且不需要任何特殊的 php.ini 設置。
php://input 不能用於 enctype=」multipart/form-data」。
解釋:
對於未指定 Content-Type 的POST數據,則可以使用file_get_contents(「php://input」);來獲取原始數據。
事實上,用PHP接收POST的任何數據都可以使用本方法。而不用考慮Content-Type,包括二進制文件流也可以。
所以用方法二是最保險的方法。
方法3、$GLOBALS['HTTP_RAW_POST_DATA'];
說明:
總是產生 $HTTP_RAW_POST_DATA 變數包含有原始的 POST 數據。
此變數僅在碰到未識別 MIME 類型的數據時產生。
$HTTP_RAW_POST_DATA 對於 enctype=」multipart/form-data」 表單數據不可用
如果post過來的數據不是PHP能夠識別的,可以用 $GLOBALS['HTTP_RAW_POST_DATA']來接收,
比如 text/xml 或者 soap 等等
解釋:
$GLOBALS['HTTP_RAW_POST_DATA']存放的是POST過來的原始數據。
$_POST或$_REQUEST存放的是 PHP以key=>value的形式格式化以後的數據。
但$GLOBALS['HTTP_RAW_POST_DATA']中是否保存POST過來的數據取決於centent-Type的設置,即POST數據時 必須顯式示指明Content-Type: application/x-www-form-urlencoded,POST的數據才會存放到 $GLOBALS['HTTP_RAW_POST_DATA']中。
9. 急!!php獲取url參數
URL 傳值只能用GET 方法,親,你的前台頁面必須用GET方法
你這前台用POST ,後台用GET, 然後還用URL ,你這是要玩壞伺服器的節奏嗎