использование curl вместо проблем fopen - PullRequest
0 голосов
/ 27 сентября 2010

Итак, я был озадачен попыткой исправить скрипт 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 - это основной пример того, что я предполагаю, и где я попробовал свои силы при взломе 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 {
    }
}
?>  

Конечный результат выполнения этого скрипта - zip. Если я щелкну правой кнопкой мыши и посмотрю источник на странице, которая действительно загружает, у него просто «1, 2, 3», идущий вниз по странице. Я уверен, что упустил что-то невероятно простое, но мои навыки программирования просто стесняются мусора, и я был бы благодарен, если бы кто-то бросил взгляд на это. Я думаю, что с curl все должно быть в порядке, но мне интересно, если мне не хватает какой-то зияющей связи между index.php и functionscript.php.

РЕДАКТИРОВАТЬ: Поэтому после прочтения предложения Белинды ниже я изменил код, чтобы прочитать это (я напечатал только те строки, которые изменились, которые были в конце сценария):

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

    header('Location:'.$webURL);

    exit;
    }
        else {
        }
}
    ?>

Код, похоже, все еще падает, хотя странно, что теперь добавляется «4» к ранее упомянутым «1, 2, 3», спускаясь вниз по странице, когда вы просматриваете источник. Я могу только рассматривать это как позитив! Если у кого-нибудь еще есть драгоценности, которые они могут отправить мне, я должен признать, что это испытание для меня настоящее испытание, хотя и приятное.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2010

Добавьте это, curl будет следовать указаниям сервера:

curl_setopt ($ ch, CURLOPT_FOLLOWLOCATION, 1);

0 голосов
/ 27 сентября 2010

Оператор заголовка не будет достигнут, потому что вы возвращаете либо true, либо false, прежде чем он будет достигнут. Вместо того, чтобы возвращать истинное перенаправление для httpcode между 200 и 300. Не уверен, что это решит это, но должно помочь.

...