2012-02-02 130 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; 
    } 
相关问题