8768 sujets

Développement web côté serveur, CMS

Bonsoir,

Depuis quelques temps les sites sous OVH et quelques autres hébergeurs proposent le https d'office. Et j'ai remarqué un bug avec les fonctions php fopen() et fgets() (que j'ai eu du mal à mettre en lien dans un premier temps).

Essayez le select des pays de cette page qui fonctionne en l'état en récupérant un fichier .csv grâce à fgets() : Page contact
Puis la même page avec le protocole SSL, on constate que le fichier .csv ne peut être lu : Page contact

Voici un extrait du code du plugin WordPress que j'avais créé pour l'occasion :
    // Boucle récupérant la liste de tous les pays
    $id_file = fopen( $uriCsv, 'r' ); // 'r' lecture seule
    while ( $line = fgets( $id_file, 1024 ) ) { // '1024' Nombre d'octets max par ligne et par défaut
      $line = explode( ' ; ', $line ); // Choix du séparateur entre les données de la ligne
      echo '<option value="' . $line[0] . '">' . $line[1] . '</option>'; // Retourne toutes les valeurs sur ce format
      if ( $pays == $line[0] ) // Sélection en cours
        echo '<option value="' . $line[0] . '" selected="selected">' . $line[1] . '</option>'; // Retourne la sélection en cours
    }


Je cherche donc une solution de contournement, si vous avez des suggestions je suis preneur.
Je ne vois pas à priori ce qui ferait que ce code se comporte différemment en HTTP ou HTTPS.

Ca dépend uniquement de la valeur de $uriCsv. Si ça indique un fichier local sur le serveur, il n'y a pas de raison que les droits d'accès et la configuration apache soient différents.

Si ça désigne une URL, c'est une très mauvaise pratique; sauf raison bien justifiée, on n'utilise jamais fopen avec une URL. A mon avis c'est là que se trouve ton souci.
Bonjour Quentin, et merci de ta réponse (et aussi à celle de Mathieu sur developpez.net).

Comme vous l'avez souligné tous les deux le problème provenait bien de la variable $uriCsv qui doit faire référence à un fichier local sur le serveur.

Il s'agissait d'un plugin pour WordPress, problème corrigé comme ceci :
$uriCsv = plugin_dir_path( __FILE__ ) . 'ListOfCountries.csv'; // Liste des pays, ISO 3166-1


Sujet résolu.