當前位置:首頁 » 編程語言 » phpfsockopen

phpfsockopen

發布時間: 2022-06-17 17:55:30

1. php如何用fsockopen 連接https伺服器

原理上使用fsockopen連接https和連接http是一樣的


但是fsockopen向一個地址發送請求時,只能自己手動拼裝頭信息,下面是我寫的一個函數,可直接調用,功能是向一個地址發起post請求


functionrequest($url,$params){
$URL=parse_url($url);
if(!isset($URL['port'])){
$URL['port']=80;
}

$request='POST'.$URL['path']."HTTP/1.1 Host:".$URL['host']." Content-type:application/x-www-form-urlencoded Content-length:".strlen(trim($params))." Connection:close ".trim($params)." ";

try{
$fp=fsockopen($URL['host'],$URL['port']);
fwrite($fp,$request);
$res=fread($fp,1024);
}catch(Exception$e){
fclose($fp);
returnfalse;
}
fclose($fp);
return$res;
}

//調用
$url='https://地址';
$result=request($url,'');

//若伺服器有反饋,則列印出來
echo$result;

2. php fsockopen()屬於哪個函數庫定義的

應該是屬於:網路函數庫
說明:
fsockopen創始一個Internet或是Unix網域中的資料流連結(AF_INET,使用 TCP 或
UDP)。Internet網域,它將會開啟一個TCP
socket連結到參數hostname,埠號為參數port,參數hostname可以是網域名稱或是IP位址。UDP連結,你需要明確的指出協定 :
udp://hostname。Unix網域,參數hostname將會使用連結到socket的路徑,參數port必須設為0。非必需選項timeout可用來設定停止連結系統呼叫的秒數。

fsockopen( )傳回一個文件指標,這可以和其它的函數一起使用,例如 : fgets( )、fgetss( )、fputs( )、fclose( )、feof( )。

如果呼叫失敗,它將會傳回false並且如果有給予參數errno和errstr,它們將會指出發生在system-level connect( ) 呼叫的錯誤。如果傳回的errno為0而且此函數傳回false,表示錯誤發生在connect(
)呼叫之前,注意 : 參數errno和errstr必須依照關系傳遞。

3. php fsockopen 可以開多少個線程

<?php
for ($i=0;$i<10;$i++) {
echo $i;
sleep(5);
}
?>

上面存成test.php, 然後寫一段SHELL代碼

#!/bin/bash
for i in 1 2 3 4 5 6 7 8 9 10
do
php -q test.php &
done

2. 利用fork子進程(其實同樣是利用LINUX操作系統)

<?php
declare(ticks=1);
$bWaitFlag = FALSE; /// 是否等待進程結束
$intNum = 10; /// 進程總數
具體你自己試試吧,我要自己在後盾人學習一些知識了,😊\(◎o◎)/!加油

4. php 判斷有沒有連接fsockopen

fsockopen() 將返回一個文件句柄,之後可以被其他文件類函數調用(例如: fgets() , fgetss() , fwrite() , fclose() 還有 feof() )。如果調用失敗,將返回 FALSE 。

5. 求 PHP 有關 fsockopen()函數的 具體講解。。。。。。 本人超級菜鳥。。。懇求大俠們的幫助。。。

你是想偽裝為IE的Http請求 到給定的url 實現一個標准get請求是吧

6. php中fsockopen函數參數問題

你說的那個是HTTP請求的一部分,你用fsockopen只能打開socket連接,還需要發送HTTP請求,類似GET /test這種
PHP官方手冊上有例子,自己看看。

7. php 如何編程 得知fsockopen函數是否被禁用

利用函數function_exists();
可以查看是否存在某一個函數,
bool function_exists ( string $function_name
);
其得出的結果是BOOL值,

如果為1或者是TRUE,代表開啟了;
如果為0或者FALSE,代表關閉了。

8. php開啟fsockopen函數

1.方法一:

第一步:

php.ini文件中查找

allow_url_fopen = On

使其值為On

第二步:

php.ini文件中查找

extension=php_openssl.dll

如果前面有分號,去掉分號

第三步:

重啟web伺服器,apache或IIS

2.還有一種情況,也就是方法二:

1. vi php.ini

找到 allow_url_fopen 這個參數設置成 On,即

allow_url_fopen = On

2. 讓你的php支持 opensll擴展。

默認,是沒有openssl擴展的,只能重新編譯安裝。

yum install openssl openssl-devel

cd /usr/local/src/php-5.2.14/ext/openssl

/usr/local/php/bin/phpize

./configure –with-openssl –with-php-config=/usr/local/bin/php-config

make && make install

看提示,把編譯成的openssl.so 拷貝到你在php.ini 中指定的 extension_dir 下

3. vi php.ini

加入

extension=openssl.so

4. 重啟web server

9. PHP fsockopen的問題,追100分。

如果不跨域名,你的寫法應該是可以的。如果跨了,放棄session,用cookie吧。

10. 如何使用fsockopen函數實現非同步執行PHP

Web伺服器執行一個PHP腳本,有時耗時很長才能返回執行結果,後面的腳本需要等待很長一段時間才能繼續執行。如果想實現只簡單觸發耗時腳本的執行而不等待執行結果就直接執行下一步操作,可以通過fscokopen函數來實現。
PHP支持socket編程,fscokopen函數返回一個到遠程主機連接的句柄,可以像使用fopen返回的句柄一樣,對它進行fwrite、fgets、fread等操作。使用fsockopen連接到本地伺服器,觸發腳本執行,然後立即返回,不等待腳本執行完成,即可實現非同步執行PHP的效果。
示例代碼如下:
functiontriggerRequest($url,$post_data=array(),$cookie=array()){
$method="GET";//通過POST或者GET傳遞一些參數給要觸發的腳本
$url_array=parse_url($url);//獲取URL信息
$port=isset($url_array['port'])?$url_array['port']:80;
$fp=fsockopen($url_array['host'],$port,$errno,$errstr,30);
if(!$fp){
returnFALSE;
}
$getPath=$url_array['path']."?".$url_array['query'];
if(!empty($post_data)){
$method="POST";
}
$header=$method."".$getPath;
$header.="HTTP/1.1\r\n";
$header.="Host:".$url_array['host']."\r\n";//HTTP1.1Host域不能省略
/*以下頭信息域可以省略
$header.="User-Agent:Mozilla/5.0(Windows;U;
WindowsNT5.1;en-US;rv:1.8.1.13)Gecko/20080311Firefox/2.0.0.13\r\n";
$header.="Accept:text/xml,application/xml,application/
xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,q=0.5\r\n";
$header.="Accept-Language:en-us,en;q=0.5";
$header.="Accept-Encoding:gzip,deflate\r\n";
*/
$header.="Connection:Close\r\n";
if(!empty($cookie)){
$_cookie=strval(NULL);
foreach($cookieas$k=>$v){
$_cookie.=$k."=".$v.";";
}
$cookie_str="Cookie:".base64_encode($_cookie)."\r\n";//傳遞Cookie
$header.=$cookie_str;
}
if(!empty($post_data)){
$_post=strval(NULL);
foreach($post_dataas$k=>$v){
$_post.=$k."=".$v."&";
}
$post_str="Content-Type:application/x-www-form-urlencoded\r\n";
$post_str.="Content-Length:".strlen($_post)."\r\n";//POST數據的長度
$post_str.=$_post."\r\n\r\n";//傳遞POST數據
$header.=$post_str;
}
fwrite($fp,$header);
//echofread($fp,1024);//伺服器返回
fclose($fp);
returntrue;
}
這樣就可以通過fsockopen()函數來觸發一個PHP腳本的執行,然後函數就會返回。接著執行下一步操作了。
現在存在一個問題:當客戶端斷開連接後,也就是triggerRequest發送請求後,立即關閉了連接,那麼可能會引起伺服器端正在執行的腳本退出。
在PHP內部,系統維護著連接狀態,其狀態有三種可能的情況:
*0–NORMAL(正常)
*1–ABORTED(異常退出)
*2–TIMEOUT(超時)
當PHP腳本正常地運行NORMAL狀態時,連接為有效。當客戶端中斷連接時,ABORTED狀態的標記將會被打開。遠程客戶端連接的中斷通常是由用戶點擊STOP按鈕導致的。當連接時間超過PHP的時限(參閱set_time_limit()函數)時,TIMEOUT狀態的標記將被打開。
可以決定腳本是否需要在客戶端中斷連接時退出。有時候讓腳本完整地運行會帶來很多方便,即使沒有遠程瀏覽器接受腳本的輸出。默認的情況是當遠程客戶端連接中斷時腳本將會退出。該處理過程可由php.ini的ignore_user_abort或由Apache.conf設置中對應的"php_valueignore_user_abort"以及ignore_user_abort()函數來控制。如果沒有告訴PHP忽略用戶的中斷,腳本將會被中斷,除非通過register_shutdown_function()設置了關閉觸發函數。通過該關閉觸發函數,當遠程用戶點擊STOP按鈕後,腳本再次嘗試輸出數據時,PHP將會檢測到連接已被中斷,並調用關閉觸發函數。
腳本也有可能被內置的腳本計時器中斷。默認的超時限制為30秒。這個值可以通過設置php.ini的max_execution_time或Apache.conf設置中對應的"php_valuemax_execution_time"參數或者set_time_limit()函數來更改。當計數器超時的時候,腳本將會類似於以上連接中斷的情況退出,先前被注冊過的關閉觸發函數也將在這時被執行。在該關閉觸發函數中,可以通過調用connection_status()函數來檢查超時是否導致關閉觸發函數被調用。如果超時導致了關閉觸發函數的調用,該函數將返回2。
需要注意的一點是ABORTED和TIMEOUT狀態可以同時有效。這在告訴PHP忽略用戶的退出操作時是可能的。PHP將仍然注意用戶已經中斷了連接但腳本仍然在運行的情況。如果到了運行的時間限制,腳本將被退出,設置過的關閉觸發函數也將被執行。在這時會發現函數connection_status()返回3。
所以還在要觸發的腳本中指明:
ignore_user_abort(TRUE);//如果客戶端斷開連接,不會引起腳本abort
set_time_limit(0);//取消腳本執行延時上限
或使用:
register_shutdown_function(callbackfuction[,parameters]);//注冊腳本退出時執行的函數

熱點內容
如何查筆記本電腦的真正配置 發布:2025-02-06 17:48:07 瀏覽:79
存儲器存在地址 發布:2025-02-06 17:47:28 瀏覽:537
phpsocket教程 發布:2025-02-06 17:42:13 瀏覽:421
mysql解壓縮版安裝 發布:2025-02-06 17:26:33 瀏覽:179
phpgd圖片 發布:2025-02-06 17:24:34 瀏覽:206
php代碼整理 發布:2025-02-06 17:24:31 瀏覽:477
java可執行文件 發布:2025-02-06 17:18:59 瀏覽:249
衛士相當於現在什麼配置 發布:2025-02-06 17:05:04 瀏覽:409
項目編譯慢 發布:2025-02-06 16:53:48 瀏覽:382
python處理excel文件 發布:2025-02-06 16:36:09 瀏覽:443