2014-10-03 61 views
1

當我使用fsockopen打開一個php頁面時,代碼工作正常,但還有一些其他問題。例如:如果我在a.php中打開b.php,「echo」在b.php中將不起作用,也不會出現錯誤消息(這兩種情況在普通頁面上正常工作)。這使調試非常困難。如何獲得頁面b中的輸出?如何獲得輸出,當使用fsockopen打開一個PHP頁面?

非常感謝!這是我的代碼。我使用main.php來調用main_single_block.php.PS:除了上面提到的兩件事外,所有的事情都可以正常工作。

main.php:

$template_url_arr_s = serialize($template_url_arr); 
$fp = fsockopen($sochost, intval($socportno), $errno, $errstr, intval($soctimeout)); 
if (!$fp) { 
    echo "$errstr ($errno) ,open sock erro.<br/>\n"; 
} 
$typename= urlencode($typename);//do url encode (if not, ' 'can not be handled right) 
$template_url_arr_s= urlencode($template_url_arr_s); 
*$out = "GET /main/main_single_block.php?typename=" . $typename . "&templateurlarr=" . $template_url_arr_s . "\r\n";* 
fputs($fp, $out); 
fclose($fp); 
+0

你打開HTTP端口嗎? PHP腳本只有在通過網絡服務器訪問時纔會執行,而不是普通文件。 – Barmar 2014-10-03 04:43:32

+0

您似乎沒有讀取套接字的輸出。所以如果劇本回應了一些東西,你就不會做任何事情。 – Barmar 2014-10-03 04:45:17

+0

爲什麼不使用'file_get_contents'? – Barmar 2014-10-03 04:46:29

回答

1

這裏的基本結構:

template_url_arr_s = serialize($template_url_arr); 
$fp = fsockopen($sochost, intval($socportno), $errno, $errstr, intval($soctimeout)); 
if (!$fp) { 
    echo "$errstr ($errno) ,open sock erro.<br/>\n"; 
} 
$typename= urlencode($typename);//do url encode (if not, ' 'can not be handled right) 
$template_url_arr_s= urlencode($template_url_arr_s); 
$out = "GET /main/main_single_block.php?typename=" . $typename . "&templateurlarr=" . $template_url_arr_s . " HTTP/1.1\r\nHost: $sochost\r\nConnection: close\r\n\r\n"; 
fputs($fp, $out); 
// First read until the end of the response header, look for blank line 
while ($line = fgets($fp)) { 
    $line = trim($line); 
    if ($line == "") { 
     break; 
    } 
} 
$output = ''; 
// Read the body of the response 
while ($line = fgets($fp)) { 
    $output .= $line; 
} 
fclose($fp); 

我已經添加了HTTP/1.1參數到GET線,所需Host:報頭的末尾,以及Connection: close所以我不需要處理解析響應的Content-Length:標題。

真正的應用程序應該解析響應頭文件,上面的代碼只是跳過它們。標題以空行結束,然後將其餘的輸出收集到一個變量中。

+0

它的工作!非常感謝! – weblen 2014-10-08 07:07:25

+0

如果它解決了你的問題,你應該接受答案。點擊複選標記。 – Barmar 2014-10-08 14:58:44

+0

嗨,你可以請幫我解決我的新問題「在使用PHP時http響應中的Stange字符串」?非常感謝你! – weblen 2014-11-14 04:40:01

相關問題