2014-09-19 4 views
3

J'ai un code pour convertir une page PHP en HTML:Comment récupérer le contenu de l'URL en utilisant php curl ou file_get_content sur le même serveur?

$dynamic = "http://website.net/home.php"; 
$out = "home.html" ; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,"$dynamic"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$file = curl_exec($ch); 

file_put_contents($out, $file); 

Cela fonctionne parfaitement dans localhost mais il prend trop de temps/ne fonctionne pas sur le site en direct. J'ai essayé php_get_contents, mais cela ne fonctionne pas non plus.

Note:

  • http://website.net/home.php page est dans le même site où le code est hébergé.
  • curl est activé et allow_url_fopen est sur selon phpinfo() dans les deux localhost et au serveur.

EDIT:

  • Il fonctionne très bien lors de l'utilisation autres pages du site au lieu de mon site.

  • La page cible du site se charge parfaitement dans mon navigateur.

La page web de mon site chargement rapide comme d'habitude, mais quand je l'utilise curl ou file_get_contents, il est trop lent et même ne peut pas obtenir une sortie.

+0

Vérifiez votre serveur phpinfo() curl support = activé et allow_url_fopen = sur –

+0

Assurez-vous que 'allow_url_fopen = on' sur l'hôte/serveur? – davidkonrad

+0

curl est activé et allow_url_fopen est sur –

Répondre

2

Je pense que vous avez un problème de résolution DNS.

Il existe deux façons d'utiliser le locahost de votre site Web au lieu du nom de domaine externe.

1. Si vous avez votre propre serveur/VPS/Serveur dédié, Ajouter entrée dans vim /etc/hosts pour 127.0.0.1 website.net ou essayer de récupérer le contenu avec localhost (127.0.0.1).

2.Si vous utilisez l'hébergement mutualisé, essayez d'utiliser ci-dessous url(s) dans votre code,

http://localhost.mywebsite.net/~username/home.php. 
OR 
Try to call http://localhost.mywebsite.net/home.php 

Essayez ceci pour récupérer le contenu url -

$dynamic = TRY_ABOVE_URL(S) 
$out = "home.html" ; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$dynamic); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$file = curl_exec($ch); 

if($file === false) { 
    echo 'Curl error: ' . curl_error($ch); 
} 

file_put_contents($out, $file); 
+1

Erreur PHP 'Attention: file_put_contents (.... contenu html .. à la ligne file_put_contents ($ result ['content'], $ out); ' –

0

Pour enquêter sur la raison pour laquelle il est ne fonctionne pas sur le serveur en direct, essayez ceci:

$dynamic = "http://website.net/home.php"; 

$out  = "home.html" ; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $dynamic); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$file = curl_exec($ch); 

if($file === false) 
{ 
    echo 'Curl error: ' . curl_error($ch); 
} 

curl_close($ch); 

file_put_contents($out, $file); 
+0

apul .. ne fonctionne pas :( –

+0

êtes-vous capable de voir une erreur par fonction curl_error? Ajouter Au début du script –

+0

Non erreurs, pas d'avertissements, fichier de sortie 0 octets .. –

0

Je pense que cela dépend de la configuration SSL du fournisseur.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_SSLVERSION, 3); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 

Vérifiez le niveau de connaissance. à propos de la configuration SSL de votre fournisseur.

+0

Je ne pense pas que cela dépendra de la configuration du fournisseur SSL –

0

Essayez celui-ci:

file_put_contents("home.html", fopen("http://website.net/home.php", 'r')); 

mais le curl devrait fonctionner aussi bien. Si vous avez un accès SSH au serveur, essayez de résoudre votre nom de domaine en utilisant ping ou quelque chose. Il est possible d'avoir un problème DNS local - il explique pourquoi vous pouvez télécharger depuis des domaines externes.

Pour mon exemple, vous aurez besoin de allow_fopen_url pour être activé, donc veuillez d'abord le vérifier par phpinfo().

+0

Le chargement et le chargement de la page et après plusieurs minutes, il est dit' Connection expired out in file.p hp à la ligne xx'. –

+0

Et sur la ligne xx vous avez le fichier file_put_contents ...? Je pense que vos problèmes sont causés par un problème de DNS. Pourriez-vous faire 'echo gethostbyname (" votrenomdedomaine.com ");' et le faire correspondre avec l'adresse IP réelle que votre site web traduit? –

+0

Il retourne l'adresse IP du serveur, et yest correspond. –

0

On dirait que c'est un problème de routage réseau, le serveur ne peut pas trouver de route vers website.net (lui-même). Ceci est un problème de serveur et pas un problème de PHP. La solution la plus rapide consiste à modifier le fichier hosts sur le serveur et à définir website.net sur 127.0.0.1.

Sur les serveurs linux, vous devrez ajouter la ligne suivante au bas du fichier/etc/hosts pour:

127.0.0.1 website.net 

Sinon, vous pouvez essayer aller chercher http://127.0.0.1/home.php mais qui ne fonctionnera pas si vous avez plusieurs hôtes virtuels sur le serveur.

+0

Le script php est hébergé sur http: // website.net' lui-même .. il n'utilise pas de site Web externe –

+0

Pourquoi le serveur ne peut-il pas accéder lui-même –

+0

Mais au serveur partagé l'édition du fichier hosts n'est pas possible –

Questions connexes