2010-09-27 5 views
0

Donc, j'ai été confondu avec essayer de réparer un script PHP que nous avons sur notre page d'accès à distance. À l'origine, il utilisait fopen si un site était disponible. Si c'était l'utilisateur qui serait dirigé vers ce site, s'il était en panne l'URL suivante serait testée et l'utilisateur redirigé s'il était réussi etcen utilisant curl au lieu de fopen problèmes

Notre nouveau site d'hébergement partagé ne permet pas de fopen pour des raisons de sécurité donc le script doit être modifié. J'ai fait de mon mieux pour concocter quelque chose, mais je sens qu'il me manque quelque chose, probablement assez fondamental.

Le script est trois fichiers php simples. Le premier est index.php (ce qui est en cours d'exécution sur Joomla donc je suppose que c'est la façon dont il doit être installé) et il ressemble à ceci:

<?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 est juste une liste des 4 sites qui sont être jugé dans l'ordre. functionscript.php est la principale viande et légumes de la chose que je suppose et où je l'ai essayé ma main dab au piratage en CURL au lieu de 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 { 
    } 
} 
?> 

Le résultat final de cette course de scipt est zip. Si je clique avec le bouton droit de la souris et affiche la source sur la page qui la charge, il y a juste un "1, 2, 3" qui descend la page. Je suis sûr que j'ai manqué quelque chose de simple, mais ma capacité de programmation est juste timide et serait reconnaissant de quelqu'un qui jette un œil sur cela. Je pense que les trucs curl devraient être bien mais je me demande si je manque un lien béant entre index.php et functionscript.php.

EDIT: Donc, après avoir lu la suggestion Belindas ci-dessous j'ai changé le code pour lire (je n'ai imprimé les lignes qui ont changé, qui étaient tous à la fin du script):

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

    header('Location:'.$webURL); 

    exit; 
    } 
     else { 
     } 
} 
    ?> 

Le code semble encore tomber mais si curieusement, il est maintenant d'ajouter un "4" aux mentions "1, 2, 3" précédemment mentionnées en descendant la page lorsque vous regardez la source. Je ne peux que voir cela comme un positif! Est-ce que quelqu'un a peut-être plus de gemmes qu'ils peuvent envoyer mon chemin comme je dois admettre que je trouve cela un vrai procès par épreuve, bien que ce soit agréable.

Répondre

0

L'instruction d'en-tête ne sera pas atteinte car vous renvoyez true ou false avant d'être atteint. Au lieu de retourner vrai redirection sur httpcode étant entre 200 et 300. Je ne sais pas si cela va le résoudre mais devrait aider.

+0

m'a pris un moment pour lire sur ce que j'ai compris ce que vous conduisez à l'heure actuelle. Va donner un aller et poster des résultats. merci –

+0

La prochaine chose que je ferais serait de vérifier la valeur de $ httpcode et voir ce que c'est. – Belinda

+0

Si c'est ce que vous attendez et que vous avez supprimé la ligne suggérée par sathia, essayez de la remettre en place. – Belinda

0

Ajouter ce, curl suivre les indications du serveur:

curl_setopt ($ ch, CURLOPT_FOLLOWLOCATION, 1);

+0

a ajouté cette ligne mais je crains que cela ne fasse aucune différence pour le résultat final. Merci pour l'aide tout de même –

Questions connexes