Php-curl : recuperation code source site web

Résolu
Bonjour,

J'essaie de mettre en place le bout de script trouve ici : https://forums.commentcamarche.net/forum/affich-2266318-php-recuperer-le-code-source-d-une-page-web

<?php

$ch = curl_init();
$timeout = 5; // set to zero for no timeout
curl_setopt ($ch, CURLOPT_URL, 'http://www.commentcamarche.net');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
$lines = array();
$lines = explode("\n", $file_contents);

// display file line by line
foreach($lines as $line_num => $line) {
echo "Line # {$line_num} : ".htmlspecialchars($line)."<br />\n";
}

?> 


Il marche bien tant que l'url est externe, mais impossible de le faire fonctionner en local (sur un site local). Est ce que quelqu'un aurait une idee sur ce qui pourrait l'en empecher ? configuration php.ini ? apache ?

Merci

6 réponses

  1. Conclusion : c'etait bien la configuration SSL d'apache qui pechait. Toujours pas de nouvelle configuration permettant une utilisation normale neanmoins.
    1. Merci pour le retour :)
  2. Bonjour mpmp93

    file-get-contents fait partie des fonctions comme fopen qui sont desactiver sur le serveur ou le script doit s'executer. ;)
    1. Bonjour,

      Pourquoi utiliser CURL????

      Y a en php l'instruction file_get_contents qui fonctionne très bien sur un URL:

      $monFichier = file_get_contents('http://www.commentcamarche.net');

      echo $monFichier;

      Si l'URL contient des caractères spéciaux, penser à encoder l'URL avec urlencode()

      A+
      1. Bonjour

        J'ai decouvert depuis que ce comportement etait du a une mauvaise configuration d'apache2. Tous mes sites locaux sont en https et la configuration de rewrite semble inappropriee, puisque en desactivant ssl et le renvoi vers 443 : ca marche.

        Voici la configuration du vhost :

        NameVirtualHost 192.168.0.15:80 
        <VirtualHost 192.168.0.15:80> 
        
                DocumentRoot            /var/www/www.local.try 
             
                ServerName              www.local.try 
                ServerAlias             local.try *.local.try 
                ServerAdmin             admin@localhost 
                 
                # Directory directives 
                <Directory /var/www/www.local.try> 
                    Options             None 
                    AllowOverride       None 
                    Order               deny,allow 
                    Allow from          10.0.1.2 10.0.1.3 10.0.1.4 10.0.1.5 
                </Directory> 
                 
                 
                # PHP directives 
                php_flag                display_errors 0 
        
                # SSL Engine Switch: 
                SSLEngine               Off 
        
        
                # Log files 
                ErrorLog                /var/log/apache2/www.local.try-error.log 
                CustomLog               /var/log/apache2/www.local.try-access.log vhost_combined 
                 
                # Possible values include: debug, info, notice, warn, error, crit, 
                # alert, emerg. 
                LogLevel                info 
        
        
                # Redirect http to https 
                RewriteEngine           On 
                RewriteOptions          Inherit 
        
                RewriteLog /var/log/apache2/https_rewrite.log 
                RewriteLogLevel 1 
                 
                RewriteCond %{SERVER_PORT} !^443$ 
                RewriteRule ^/(.*) https://%{SERVER_NAME}/ [L,R] 
        </VirtualHost> 
        
        NameVirtualHost 192.168.0.15:443 
        <VirtualHost 192.168.0.15:443> 
        
                DocumentRoot            /var/www/www.local.try 
             
                ServerName              www.local.try 
                ServerAlias             local.try *.local.try 
                ServerAdmin             admin@localhost 
                 
                # Directory directives 
                <Directory /var/www/www.local.try> 
                    Options             None 
                    AllowOverride       None 
                    Order               deny,allow 
                    Allow from          10.0.1.2 10.0.1.3 10.0.1.4 10.0.1.5 
                </Directory> 
                 
                 
                # PHP directives 
                php_flag                display_errors 0 
        
                # SSL Engine Switch: 
                SSLEngine               On 
                SSLProtocol             all -SSLv2 
        
                #   Client Authentication (Type): 
                SSLCertificateFile      /home/mrman/.ssl/certs/local-cert.pem 
                SSLCertificateKeyFile   /home/mrman/.ssl/private/local-key.pem 
                 
                # Log files 
                ErrorLog                /var/log/apache2/www.local.try-error.log 
                CustomLog               /var/log/apache2/www.local.try-access.log vhost_combined 
                 
                # Possible values include: debug, info, notice, warn, error, crit, 
                # alert, emerg. 
                LogLevel                info 
        </VirtualHost>


        Car ayant fait le test sur des serveurs externes https, ca marche.

        Pour l'appel sur site local, je remplace juste par l'url local : http(s)://site.local

        Merci de ton aide.
        1. Ah, désolé, mais là ça va être un peu trop complexe pour que je t'aide sans passer trois heures à réviser mon apache, surtout avec SSL que je n'ai jamais utilisé...
          Essaie éventuellement en forçant le port dans ton URL locale ?
      2. Bonjour,

        Tu peux nous montrer comment tu fais ton appel sur un site local ? A priori il n'y a pas de raisons pour que le comportement soit différent...

        Xavier