2011-06-16 1793 views
4

我是一個新手,我試圖讓腳本在PHP中用Curl觸發另一個腳本,但它似乎在發送參數。Php Curl added Params

是否有一個單獨的函數來追加參數?

<?php 
$time = time(); 
$message = "hello world"; 


$urlmessage = urlencode($message); 

$ch = curl_init("http://mysite.php?message=$urlmessage&time=$time"); 

curl_setopt($ch, CURLOPT_HEADER, 0); 

curl_exec($ch); 
curl_close($ch); 
?> 

任何人都可以指出我在正確的方向?

+0

請通過PHP的文檔閱讀:http://us3.php.net/manual/en/book.curl.php。這個問題有相當詳細的解釋。 – 2011-06-16 06:23:47

+0

不要這樣做; '$ ch = curl_init(「http://mysite.php?message = $ urlmessage&time = $ time」);'這樣做; '$ ch = curl_init('http://mysite.php?message ='。$ urlmessage。'&time ='。$ time);'讀起來更容易,而且你會更安全。如果你有一個變量'$ url',那麼理論上可以使用它來代替'$ urlmessage'。 – Phliplip 2011-06-16 06:23:47

+0

@Philiplip:更好的是,使用sprintf()。像這樣:sprintf('http://mysite.com/myscript.php?message=%s&time=%d',$ urlmessage,$ time); (編輯:....似乎無法弄清楚如何在評論中添加代碼塊....:S) – 2011-06-16 06:29:46

回答

10

您需要curl_setopt()以及CURLOPT_POSTFIELDS參數。 這將發佈給定的參數到目標頁面。

curl_setopt($ch, CURLOPT_POSTFIELDS, 'foo=1&bar=2&baz=3');

PS:還要檢查http_build_query()發送許多變量時,這是很方便。

+0

感謝堆的唯一問題是,它不會允許我的變量作爲值或字符串發佈相反,它將它們作爲文字發佈,例如$ time should = 5327287,而不是$ time =「$ time」。謝謝 – Christopher 2011-06-16 06:14:57

+1

@Christopher:將單引號改爲雙引號,這將解決文字問題。另外,將POST值字符串放在一個變量中,而不是在curl_setopt函數調用中構建它。這是因爲發送POST長度和curl通常是一個好主意,然後您不必構建查詢兩次。 – 2011-06-16 06:27:23

+0

腳本是否有運行,但隨後會反彈回原始? – Christopher 2011-06-16 07:01:29

5

你需要設置CURLOPT_POSTtrueCURLOPT_POSTFIELDS =>參數

curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters); 

的建議,設置「CURLOPT_RETURNTRANSFER」,爲真返回轉移爲curl_exec($ch)返回值的字符串,而不是輸出出來的直接

+1

上訪問它們。這是一個更好的解決方案。最好將'CURLOPT_POSTFIELDS'設置爲一個參數數組,而不是構建查詢字符串版本。 – 2016-02-24 16:09:58