2009-11-22 6 views
1

Je suis en train d'écrire une petite application pour ma station de radio universitaire en PHP. Il récupère essentiellement le nombre d'écouteurs de la page d'état (http://www.address.com:8000/status.xsl) et le place dans une base de données toutes les minutes.Utiliser file() ne retourne rien - PHP

Maintenant, le script semble fonctionner correctement lorsqu'il est exécuté sur mon ordinateur personnel. Je n'ai aucun problème à récupérer les informations de cette page d'état. Cependant, lorsque je le charge sur mon pack d'hébergement partagé, il semble que le délai expire. J'ai essayé d'utiliser file() sur d'autres sites comme google.com en utilisant à la fois le nom de domaine et l'adresse IP et cela fonctionne très bien. Je suis vraiment confus quant à ce que je devrais vérifier pour. Je ne vois pas de référence spécifique aux paramètres de timeout pour le fichier() dans php.ini et le fait que cela fonctionne avec d'autres sites cela me fait penser que l'université le bloque. Cependant, si c'est le cas, pourquoi cela fonctionnerait-il à la maison?

Des idées?

Merci.

Répondre

1

Assurez-vous que l'hôte n'est pas un bloc d'appels ouverts.

Je voudrais essayer d'utiliser curl à la place pour aller chercher des pages Web distantes, car la plupart des hôtes permettent d'aller chercher des pages Web externes.

1

Vous pouvez obtenir un peu plus de kilométrage sur cUrl, il fait le même travail que vous essayez d'atteindre, mais a été spécialement conçu pour ce travail (charge plus de paramètres aussi). Il y a quelques restrictions qu'un admin sys peut placer sur des fonctions de fichier() qui vous empêcheraient d'utiliser cette fonction filesystem de cette manière.

Vérifiez que curl est installé en accédant à un fichier avec <?php phpinfo(); ?> comme contenu.

Bonne chance

+0

Merci beaucoup. J'ai essayé cURL mais je reçois des résultats similaires. Il fonctionne comme un charme sur ma machine à la maison, mais quand téléchargé sur mon hébergement partagé, il ne fonctionne pas. La chose étrange est, si j'utilise curl (et le fichier d'ailleurs) sur google, ou un autre site, cela fonctionne bien (sur le paquet partagé ainsi que la maison). Est-il possible que mon hôte bloque la connexion en quelque sorte? Le seul problème est que chaque port utilisé porte le port 8000. – Sam

+0

Si 'file()' et cURL ne fonctionnent pas, votre hébergeur bloque probablement les requêtes sortantes au-dessus d'une certaine plage de ports. J'ai eu le même problème avec l'hébergement partagé Godaddy dans le passé. – leepowers

1

Votre configuration PHP doit avoir la directive allow_url_fopen activée si vous voulez être en mesure de récupérer des fichiers via une URL. Il ne peut pas être défini lors de l'exécution, vous devez donc modifier directement le fichier php.ini.

0

Il est courant que les pare-feu universitaires bloquent l'accès aux ports autres que HTTP ou HTTPS. Donc, le port 8000 peut être le problème.

+0

Merci. Je ne pense pas que l'uni le bloque parce que la station fonctionne sur 8000 et je peux y accéder avec le script que j'ai écrit depuis mon serveur domestique. – Sam