2012-02-02 129 views
0
  • 我有一個網站www.abc.domain.com用.htaccess保護& .htpasswd。
  • 我有文件需要訪問www.abc.domain.com並檢查數據的callback.php文件。該文件位於其他服務器,其他域中。
  • 我使用curl來請求。

我看到CURLOPT_USERPWD可以用於訪問受保護的文件夾。但在我的callback.php文件中,它沒有CURLOPT_USERPWD。我如何修改我的文件,添加CURLOPT_USERPWD使其工作?允許PHP文件訪問受保護的文件夾?

你可以看到我的文件位置:

<?php 
function callback_start() { 
    $yoururl = "http://abc.domain.com"; 
    include "key.php"; 
    $pass_array['key'] = $key; 
    $pass_array['domain'] = $_SERVER['SERVER_NAME']; 

    function confirm($url, $data) { 
     $options = array(CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => false, 
      CURLOPT_FOLLOWLOCATION => false, CURLOPT_AUTOREFERER => true, 
      CURLOPT_CONNECTTIMEOUT => 50, CURLOPT_TIMEOUT => 50, CURLOPT_MAXREDIRS => 0, 
      CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $data, CURLOPT_SSL_VERIFYHOST => 0,); 

     $ch = curl_init($url); 
     curl_setopt_array($ch, $options); 
     $content = curl_exec($ch); 
     curl_close($ch); 
     return $content; 
    } 

    $info = confirm($yoururl . "/folder/index.php", $pass_array); 
    if ($info['status'] == "2") { 
     return die("Suspended!"); 
    }elseif($info['status'] == "3") { 
     return die("Incorrect"); 
    }elseif($info['status'] != "1") { 
     return die("Error!"); 
    } 
} 
?> 
+1

你嘗試只是將它添加到您的$ options數組? – 2012-02-02 04:32:52

+0

我不知道如何使用'curl_setopt($ curlObj,CURLOPT_USERPWD,「$ username:$ password」);'作爲數組。 – 2012-02-02 08:09:48

回答

0

這可能是一個延伸,但如果在同一本地網絡上運行的服務器,你可以這樣做:

Using .htaccess to mask a domain?

應用這裏:(食物爲Apache配置文件httpd.conf)

<VirtualHost *:80> 
    ServerName private.abc.com 
    ProxyRequests  Off 
    ProxyPreserveHost On 
    <Proxy *> 
    Order deny,allow 
    Allow from all 
    </Proxy> 
    ProxyPass/http://protected-site-local-ip:80/private/ 
    ProxyPassReverse/http://protected-site-local-ip:80/private/ 
    <Location /> 
    Allow from all 
    </Location> 
</VirtualHost> 

由於PHP運行s在本地系統上訪問代理站點時沒有問題(沒有密碼,但只能從本地網絡訪問)。確保你不要讓代理人成爲公共領域。

我還沒有嘗試過,但你可以從PHP直接轉到本地網絡上的文件嗎? (例如http://10.149.2.1/www/private/stuff-you-need)?您可能完全繞過代理方法。

0

嗯,我沒有試過,但我的想法是,你會做這樣的:

function confirm($url, $data) { 
     $options = array(CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => false, 
      CURLOPT_FOLLOWLOCATION => false, CURLOPT_AUTOREFERER => true, 
      CURLOPT_CONNECTTIMEOUT => 50, CURLOPT_TIMEOUT => 50, CURLOPT_MAXREDIRS => 0, 
      CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $data, CURLOPT_SSL_VERIFYHOST => 0, 
      CURLOPT_USERPWD => $username.":".$password,); 

     $ch = curl_init($url); 
     curl_setopt_array($ch, $options); 
     $content = curl_exec($ch); 
     curl_close($ch); 
     return $content; 
    } 
相關問題