[PHP-users 253] Re: リンク切れを調査する方法について

Kouichi Matsumoto php-users@php.gr.jp
Sun, 24 Jun 2001 22:44:35 +0900


松本です。

お返事送れてすみません。すっかりスレッドに埋もれてしまいました(汗)
> gethostbyname()にはタイムアウト値を設定できないので、
> 素直にfsockopen()でタイムアウト値を設定して接続の可否を調べる
> というのではだめなのでしょうか?
socketタイムアウト関数があったとは知らず、ありがとうございました。
ただ、socket_set_timeout()のタイムアウト値が有効になりませんでした。
<?
$connection = fsockopen("www.aaaaaaaaaaaaaaa.com", 80);
$pass = "/";
if ($connection) {
    fputs($connection,"GET $pass HTTP/1.0\r\n\r\n");
$start = time();
socket_set_timeout($connection, 1,1);
    while (!feof($connection)) {
        $buff = fgets($connection,4096);
        print($buff);
    }
    fclose($connection);
}
?>

> opensslをインストールされてるなら、以下のURLが参考になると思います。
> 
> http://www.modssl.org/docs/2.8/ssl_faq.html#ToC19
> 
> opensslコマンドをpopen()などで起動すればよろしいのではないかと。
URLを参考に、UNIXのコマンドラインからはhttpsページを取得できたのですが、
PHPで下記のように行っても、Timeoutになり何も返りませんでした。
popenの使い方等が間違っているのでしょうか?
<?
$ssl_sock = popen("openssl s_client -connect www.rakuten.co.jp:443 -state -debug", "w");
fputs($ssl_sock, "GET / HTTP/1.0\r\n\r\n");
while (!feof($ssl_sock)) {
    echo fgets($ssl_sock, 4096);
}
pclose($ssl_sock);
?>

httpsのページをチェックしWWWサーバーのエラーコード401、405等が取得したかった
のですが、とりあえず妥協してcurl関数あたりを使用してみようと思います。

///* Kouichi.Matsumoto */