2009-05-23 8 views
1

私はクラスでこの機能を持っている:sslがphpを介してWebサーバー上に存在するかどうかをチェックする方法は?

function enable_ssl() { 
    if ($_SERVER[HTTPS] != "on") { 
     $domain = "https://".$_SERVER['HTTP_HOST'] . "/" . $_SERVER['SCRIPT_NAME']; 
     header("Location: {$domain}"); 
    } 
} 

問題は、サーバーがSSLがインストールされていないと私はページを開始し、この関数は404ページにリダイレクトしていたときにということです。私は、SSLがインストールされ、動作しているときにのみ、この機能をどのように動作させることができるのだろうかと思いましたか?

可能ですか?

ありがとうございました。

P .:私はいくつかのGoogleの調査をしましたが、何も検索できませんでした。

答えて

2

* nixサーバーでは、ポート443でリッスンしているWebサーバーに対して、netstat -A inet -lnpの出力を解析できます。

より良いオプションは、ユーザーにとって設定オプションにすることです。 HTTPSが有効になっているかどうかをアプリに伝えるようにします。

+1

+1後者のアドバイスのため。 – Gumbo

+0

問題は、GUIで設定を編集してSSLを有効にすると、エラーのためにSSLを再びオフにできなくなることです。これは、ソフトウェアプロバイダが混乱したサポートチケットを取得していることを意味し、プロバイダーはウェブサイトのダウンタイムを挟んで自分自身に入り、変更する必要があります。 –

1

2アイデア

  1. セットアップポート443へのソケット接続と、それが接続されているかどうかを確認します。
  2. Apacheの設定ファイルを読み、あなたがcurlを使用してサーバーに接続しようとすることができ、そのポート
0

に聞いて何があるかどうかを確認してください。しかし、私もconfigオプションを実行しようとします。以下を使用する場合は、無限ループを起こさないようにしてください。

function ignoreHeader($curl, $headerStr) 
{ 
    return strlen($headerStr); 
} 

$curl = curl_init("https://example.com/"); 
curl_setopt($curl, CURLOPT_NOBODY, TRUE); 
curl_setopt($curl, CURL_HEADERFUNCTION, 'ignoreHeader'); 
curl_exec($curl); 
$res = curl_errno($curl); 

if($res == 0) 
{ 
    $info = curl_getinfo($curl); 
    if($info['http_code'] == 200) 
    { 
    # Supports SSL 
    enable_ssl(); 
    } 
} 
else 
{ 
    # Doesn't. 
} 
0

xamppを自分のラップトップの開発サーバーとして使用します。私はまだxamppでSSL接続を設定していません。私のプロダクションサーバーはSSLを有効にしており、有効な証明書も持っています。

$ _SERVER ['HTTPS']はxampp開発サーバーには存在しませんが、運用サーバーには存在することがわかりました。

$ _SERVER ['HTTPS']が設定されていないと、サーバー上でSSLが有効になっていない(おそらく間違っている)と想定しています。

<?php 

if (isset($_SERVER['HTTPS')) echo 'SSL Exists' 
else echo 'No SSL' 

?> 
+1

ほとんどの場合、$ _SERVER ['HTTPS']はSSLで要求が行われた場合にのみ設定され、設定されている場合は現在の要求がHTTPS要求であるかどうかを示します。残念ながら、SSLを使用して同じURIを要求できるかどうかはわかりません。 – totels

2

エクステンションがロードされました!

http://php.net/manual/en/function.extension-loaded.php

例えば

if(!extension_loaded('openssl')) 
{ 
    throw new Exception('This app needs the Open SSL PHP extension.'); 
} 
+1

これは問題を解決しません。拡張機能がロードされているという理由だけで、SSL証明書が存在していて、特定の仮想ホストに対してオンになっているわけではありません。 – ceejayoz

-2

これは、ワードプレスはそれをしない方法です:

<?php 
function is_ssl() { 
if (isset($_SERVER['HTTPS'])) { 
return true; 
if ('1' == $_SERVER['HTTPS']) 
return true; 
} elseif (isset($_SERVER['SERVER_PORT']) && ('443' == $_SERVER['SERVER_PORT'])) { 
return true; 
} 
return false; 
} 
?> 

あなたがもの「真を返す」の間であなたの検証を使用することができます!説明と詳細なソースコードについては、 http://tutes.in/2012/02/13/check-if-ssl-exists-on-a-webserver-through-php/ にアクセスしてください。

0

私はちょうどfile_get_contentsを使って、httpsで同じファイルを開こうとしましたが、成功した場合は強制的にリダイレクトします...

function IsHttps() 
    { 
     return 
      (!empty($_SERVER["HTTPS"]) && (strtolower($_SERVER["HTTPS"])!=="off")) 
      || ($_SERVER["SERVER_PORT"]==443); 
    } 

    if (!IsHttps() && extension_loaded("openssl")) 
    { 
     $target = "https://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]; 
     ini_set("allow_url_fopen", true); 
     if (file_get_contents($target)!==false) 
     { 
      header("Location: https://".$_SERVER["HTTP_HOST"].$_SERVER["URL"]); 
      die(); 
     } 
    } 
関連する問題