使用curl而不是fopen问题

时间:2010-09-27 11:03:46

标签: php curl fopen

所以,我一直在努力修复我们在远程访问页面上的PHP脚本。如果网站可用,最初它会使用fopen。如果是用户将被定向到该站点,如果它被关闭,则下一个URL将被测试并且用户在那里重定向,如果它成功等等。

我们的新共享主机站点出于安全原因不允许fopen,因此必须修改脚本。我尽力拼凑一些东西,但觉得我错过了一些东西,可能是非常基础的。

该脚本是三个简单的php文件。第一个是index.php(这是在Joomla上运行,所以我假设这是必须如何设置),它看起来像这样:

<?php
error_reporting(E_ALL);
ini_set('display_errors',TRUE);
$counter = 1;
include ("URLs.php");
include ("functionscript.php");

error_reporting(0);

while ( $counter <= 5 ) {
$webURL = "URL".$counter;
redirectIfValid( ${"URL".$counter} );
$counter = $counter + 1;
}
?>

URLs.php只是按顺序尝试的4个站点的列表。 functionscript.php是我想要的东西的主要肉和蔬菜,我尝试用我的DAB手攻击CURL而不是fopen:

<?
function redirectIfValid($webURL)
{
ini_set("default_socket_timeout","05");
set_time_limit(5);

$ch=curl_init();

curl_setopt ($ch, CURLOPT_URL, $webURL);

curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt ($ch,CURLOPT_VERBOSE,false);

curl_setopt($ch, CURLOPT_TIMEOUT, 5);

$page=curl_exec($ch);

//echo curl_error($ch);

$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

curl_close($ch);

if($httpcode>=200 && $httpcode<300) return true;

else return false;

if($httpcode==true) {
    header('Location:'.$webURL);
    exit;
        }
       else {
    }
}
?>  

这个scipt运行的最终结果是zip。如果我右键单击并查看加载页面上的源代码,则页面上只有一个“1,2,3”。我确信我已经错过了一些简单的东西,但我的编程能力只是羞于垃圾,并且会感激有人盯着这个。我认为卷曲的东西应该没关系,但想知道我是否错过了index.php和functionscript.php之间的一些差距。

编辑:所以在阅读下面的Belindas建议之后,我已经更改了代码以阅读此内容(我只打印了已更改的行,这些行都在脚本的末尾):

if($httpcode>=200 && $httpcode<300) {

    header('Location:'.$webURL);

    exit;
    }
        else {
        }
}
    ?>

代码似乎仍然有些失败但奇怪的是,现在要在查看源代码时向页面下方的“1,2,3”添加“4”。我只能认为这是积极的!有没有人可能有更多的宝石,他们可以发送我的方式,因为我必须承认我发现这是一个真正的考验,虽然是一个愉快的考验。

2 个答案:

答案 0 :(得分:0)

将无法访问标头语句,因为您在到达之前返回true或false。而不是在httpcode上返回200到300之间的真正重定向。不确定这是否会解决它但应该有所帮助。

答案 1 :(得分:0)

添加此项,curl将遵循服务器指示:

curl_setopt($ ch,CURLOPT_FOLLOWLOCATION,1);