【问题标题】:using curl instead of fopen problems使用 curl 代替 fopen 问题
【发布时间】:2010-09-29 17:58:46
【问题描述】:

所以,我一直在尝试修复远程访问页面上的 php 脚本。最初,如果站点可用,它将使用 fopen to。如果是,用户将被定向到该站点,如果它关闭,则将测试下一个 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 是我认为的主要内​​容,并且我已经尝试过使用 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”。我确信我错过了一些非常简单的东西,但我的编程能力简直是垃圾,如果有人关注这一点,我将不胜感激。我认为 curl 的东西应该没问题,但想知道我是否缺少 index.php 和 functionscript.php 之间的一些空白链接。

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

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

    header('Location:'.$webURL);

    exit;
    }
        else {
        }
}
    ?>

尽管奇怪的是,当您查看源代码时,现在要在前面提到的“1、2、3”中添加一个“4”,代码似乎仍然失败了。我只能认为这是积极的!有没有人有更多的宝石可以寄给我,因为我必须承认我发现这是一次真正的考验,虽然很愉快。

【问题讨论】:

    标签: php curl fopen


    【解决方案1】:

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

    【讨论】:

    • 花了我一段时间来阅读这篇文章已经掌握了你现在的驾驶情况。将试一试并回发结果。谢谢
    • 接下来我会检查 $httpcode 的值,看看它是什么。
    • 如果这是您所期望的,并且您已删除 sathia 建议的行,请尝试将其放回。
    【解决方案2】:

    添加这个,curl会按照服务器提示:

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

    【讨论】:

    • 添加了这一行,但恐怕它对最终结果没有影响。谢谢大家的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多