導航:首頁 > 編程語言 > phpfsockopen開啟

phpfsockopen開啟

發布時間:2023-09-03 16:37:05

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函數是否被禁用

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

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

3. 如何開啟fsockopen函數

第一步
找到php.ini文件,用記事本打開,查找 allow_url_fopen = 看看後面是 off 還On , 如果是On,直接看下一步,如果是off 那就修改成On,需要注意完整的是allow_url_fopen = On等號的左右有空格,為了避免代碼修改出錯,請直接復制下面的替換原來的即可。
第二步
繼續在php.ini文件中,查找,查找extension=php_openssl.dll 找到以後大家注意,extension=php_openssl.dll這段代碼前面會有個 ; 號,只要把這個 ; 號刪除,然後保存。第三步
重啟IIS,打開IIS信息服務管理器,右鍵點擊XX(本地計算機),選擇 所有服務 點擊 重新啟動IIS ,等待重新啟動完成,(XX代表你的伺服器管理用戶名),重啟動完成後,fsockopen函數 應該成功開啟了,如果你正在安裝網站程序,需要刷新你的網站程序,然後即可看到,由原來的伺服器不支持fsockopen函數,變成 支持fsockopen函數。

4. 如何開啟Prestashop中PHP錯誤日誌

有時候在安裝一些新的東西是經常出現頁面空白的情況,多半是php出錯了。為了讓大家能夠更好地調試程序,或者讓別人更容易幫到你,把錯誤日誌打出來就非常有必要。
因為大多數人使用的是虛擬主機,沒有許可權設置php.ini,我們只能通過修改自己的程序達到輸入錯誤日誌的目的。
將下面兩行加到config/config.inc.php的@ini_set('display_errors',
'off');之前即可。
1. @ini_set('error_log',
'/home/你的用戶名/wwwroot/php_error.log');
2. @ini_set('log_errors',
'On');
注意,error_log中的你的用戶名是你的主機商給你的用戶ID。錯誤日誌放在哪個目錄不要緊,重要的是你的ID有目錄的寫文件許可權。
順便提下在php.ini里的設置,如果你有許可權修改的話。
1. log_errors = On2.

5. 如何使用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]);//注冊腳本退出時執行的函數

6. 如何開啟PHP日誌功能

開啟步驟如下:
1. 打開php.ini文件。
以ubuntu為例,這個文件在: /etc/php5/apache2 目錄下為例。
2. 搜索並修改下行,把Off值改成On
display_errors = Off
3. 搜索下行
error_reporting = E_ALL & ~E_NOTICE
或者搜索:
error_reporting = E_ALL & ~E_DEPRECATED
修改為
error_reporting = E_ALL | E_STRICT
4. 修改Apache的 httpd.conf,
以Ubuntu 為例, 這個文件在:/etc/apache2/ 目錄下,這是一個空白文件。
添加以下兩行:
php_flag display_errors on
php_value error_reporting 2039
5. 重啟Apache,就OK了。
重啟命令: :sudo /etc/init.d/apache2 restart.

閱讀全文

與phpfsockopen開啟相關的資料

熱點內容
命令與征服叛逆者修改器 瀏覽:242
怎麼用ios玩安卓全民槍戰 瀏覽:666
程序員入行前後的頭發 瀏覽:709
嵌入式圖像演算法 瀏覽:327
伺服器如何訪問伺服器失敗 瀏覽:873
android進度球 瀏覽:999
Linux造成xfs文件夾 瀏覽:455
華為手機怎麼修改wifi加密類型 瀏覽:248
伺服器封口是什麼意思 瀏覽:741
有限元分析是演算法嗎 瀏覽:901
空氣壓縮機性能曲線 瀏覽:20
京城程序員2019 瀏覽:403
android新系統 瀏覽:510
安卓80有什麼bug 瀏覽:678
如何做單機伺服器 瀏覽:943
校訊通查成績怎麼顯示伺服器異常 瀏覽:882
冰箱壓縮機工作壓力是多少 瀏覽:408
程序員20多平米租房 瀏覽:451
電工知識用線的演算法 瀏覽:338
極光推送php伺服器端 瀏覽:5