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
    1. Merci pour le retour :)
      0
  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
    0
    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.
      0
      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 ?
        0
    2. Non mais merci quand meme. ;)
      0
      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+
        0
        1. Bonjour mpmp93

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