Bonjour,
j'ai un serveur perso fabriqué avec des vieux pc et freenas. (serveur distant donc).

Je me suis fait un site perso, hébergé gratuitement, pour ma familles qui est éloignée. Le site fonctionne bien. Pour ne pas stocker les photos et les autre fichiers a partager sur mon site, j'utilise Webdav sur mon serveur comme porte d'accès et curl pour lister les dossiers et afficher les photos. Mais cette solution ne me plait qu'à moitié, car il y a encore trop de manip pour ma famille: pour voir les photos, ils doivent utiliser Webdav qui n'est pas beau et peu manipulable, et pour échanger les fichier, je les fait passer par Filezilla.

Je suis tombé sur un script qui fabrique des miniatures à la volée et en afficher les photos. Mais pour que ça marche, je ne veux plus passer par Webdav. A terme, je souhaite aussi que ma famille télécharge les photos directement depuis le site.

Bref, je commence mon script et j'ai déjà des problèmes pour me connecter.

j'essaye d'utiliser ftp_connect.

<?php
    // Global Connection Settings
$ftp_server = "adresse en local";      //adresse du serveur (exclue ftp://) 
$ftp_user_name = "login";        // login
$ftp_user_pass = "pass";      // mot de passe
$ftp_port = "1234";        // port du ftp

// ouvre une connexion FTP 
$conn_id  =  ftp_connect ($ftp_server, $ftp_port) or die ( "Impossible de se connecter à  $ftp_server " ); 

//  connection 
if ( ftp_login ( $conn_id ,  $ftp_user_name ,  $ftp_user_pass )) { 
echo  "Connecté en tant que  $ftp_user_name @ $ftp_server " ;
} else { 
echo  "Impossible de se connecter en tant que  $ftp_user_name " ; 
} 
// Activation du mode passif
ftp_pasv($conn_id, true);

//Renvoie ce qu'il y a
echo ftp_pwd($conn_id);

Et là:

( ! ) Warning: ftp_login(): SSL/TLS required on the control channel in E:\Creation site internet\Wamp\wamp\www\test\index.php on line 17
Call Stack
#   Time    Memory  Function    Location
1   0.0014  138800  {main}( )   ..\index.php:0
2   0.0229  147856  ftp_login ( )   ..\index.php:17

Impossible de se connecter en tant que login 

( ! ) Warning: ftp_pwd(): SSL/TLS required on the control channel in E:\Creation site internet\Wamp\wamp\www\test\index.php on line 23
Call Stack
#   Time    Memory  Function    Location
1   0.0014  138800  {main}( )   ..\index.php:0
2   0.0263  148176  ftp_pwd ( ) ..\index.php:23

Falezilla fonctionne très bien avec les identifiant. Il est connecté en TLS.

Auriez vous des suggetions ? ça fait 4 jours que je me bat. J'ai meme essayé ftp_ssl_connect...

13 réponses


Juste une question, ton site est stocker sur le même FTP que celui où y a les photos ?

JoHuv
Auteur

Bonjour,

Mon serveur est une tour à part. Freenas possède son propre FTP. Mon site est pour le moment sur mon pc qui est en réseau via ma box avec mon serveur.
J'utilise actuellement Wamp pour "créer et modifier" mon site. Une version est actuellement sur un hébergeur.
Bref, Wamp et le FTP du serveur n'est lié que par le même routeur.

JoHuv
Auteur

Je n'arrives pas a comprendre ce qu'il veut dire par:

    SSL / TLS requis sur le canal de contrôle

Quel renseignement veut-il de plus ?

Edit:
J'ai enlevé le mode TLS du serveur pour faire un essaie. Ca m'a enlevé les messages d'erreur, mais je n'ai pas pu me connecter pour autant...

Que puis-je faire pour me connecter enfin ? il y a t-il possibilités de me connecter avec un autre langage ? comment fait Filezilla ??
Curl est bien simpa, mais limité dans l'affichage sur mon site php...

As tu essayais d'utiliser ftp_ssl_connect() ? (https://secure.php.net/manual/fr/function.ftp-ssl-connect.php)

FileZila c'est un logiciel donc il utilise lui aussi le protocol FTP mais il est pas coder en PHP

Après le plus simple c'est qu'au lieu de passer par un FTP (et même si tu veux garder ça) tu télécharges tout les fichiers du FTP et tu les stockent sur ton site, ce qui permetra un affichage sans devoir à chaque fois chercher les fichiers sur le FTP.

JoHuv
Auteur

Oui, j'ai essayé ftp_ssl_connect qui, je pense, n'est pas connu de Wamp puisqu'il ne l'est déjà pas de Win. Mais j'ai essayé de nouveau:

    // ouvre une connexion FTP 
$conn_id = ftp_ssl_connect($ftp_server, $ftp_port) or die ( "Impossible de se connecter au serveur $ftp_server " ); 

// essayez de vous connecter 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if (!$login_result) {
// PHP aura déjà soulevé un message de niveau E_WARNING dans ce cas
die("can't login");
}

// Activation du mode passif
ftp_pasv($conn_id, true);

echo ftp_pwd($conn_id);

Ce qui donne l'erreur:

Erreur fatale: appel de la fonction non définie ftp_ssl_connect () dans E: \ Creation internet site \ Wamp \ wamp \ www \ test \ index.php à la     ligne 15
Pile d'appels
#   Temps   Mémoire Une fonction    Emplacement
1   0,0016  135328  {principale}( ) .. \ index.php : 0

Je ne peux pas stocker les fichiers sur le site, il y en a beaucoup trop... il me faut une connection quoi qu'il en est. Curl est soit trop limité, soit je m'y prend mal car trop peu formé.

JoHuv
Auteur

Oui, j'ai essayé ftp_ssl_connect qui, je pense, n'est pas connu de Wamp puisqu'il ne l'est déjà pas de Win. Mais j'ai essayé de nouveau:

    // ouvre une connexion FTP 
$conn_id = ftp_ssl_connect($ftp_server, $ftp_port) or die ( "Impossible de se connecter au serveur $ftp_server " ); 

// essayez de vous connecter 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if (!$login_result) {
// PHP aura déjà soulevé un message de niveau E_WARNING dans ce cas
die("can't login");
}

// Activation du mode passif
ftp_pasv($conn_id, true);

echo ftp_pwd($conn_id);

Ce qui donne l'erreur:

Erreur fatale: appel de la fonction non définie ftp_ssl_connect () dans E: \ Creation internet site \ Wamp \ wamp \ www \ test \ index.php à la     ligne 15
Pile d'appels
#   Temps   Mémoire Une fonction    Emplacement
1   0,0016  135328  {principale}( ) .. \ index.php : 0

Je ne peux pas stocker les fichiers sur le site, il y en a beaucoup trop... il me faut une connection quoi qu'il en est. Curl est soit trop limité, soit je m'y prend mal car trop peu formé.

ftp_ssl_connect ne fonctionne pas sur Windows si tu l'a pas compiler toi même si je m'abuse.
Et n'arrive même pas à te connecter à ton FTP (on verra pour chercher els images après) ?

JoHuv
Auteur

En effet, c'est ce que j'ai comprit. Mais, je n'arrives pas à trouver comment. C'est un peu trop poussé pour mon expérience. Et une question se pose à moi: si je le fais avec mon pc, il faudra le faire aussi plus tard sur mon hébergeur ? sinon, ça ne marchera plus. De plus, si je ne me trompe pas, Wamp ne fonctionne pas en statique ?!

Ton hébergeur est sur Linux (à 99.99% sur) donc c'est pas un problème pour le SFTP.
Et que veut tu dire pas WAMP ne fonctionne pas en statique?

JoHuv
Auteur

"n'est disponible que si le module ftp et le support OpenSSL sont compilés statiquement "
Pour faire mon site, je travaille avec WAMP. C'est donc les modules de Wamp qu'il faut compiler ? Et j'ai lu a plusieurs reprises des conversations qui mentionnaient le fait que Wamp travaillait en dynamique, mais pas en statique. Intox ?

ça j'en sais rien j'utilise plus WAMP depuis un moment et j'utilise le Sous système Linux sur Windows pour coder sur Win donc là je ne peux pas t'aider

JoHuv
Auteur

Je n'arrives pas a comprendre comment et quoi "compiler"... il faut installer openssl, c'est ça ?

JoHuv
Auteur

Bon, je ne trouves pas de solution. Donc, j'en cherche une autre.

Je garde l'utilisation de simpleDom qui fonctionne jusqu'à présent.

Actuellement, puisque Dom affiche seulement, j'ai fait en sorte que ce qui est affiché devienne un lien. On clic et une page s'ouvre sur mon serveur.

<?php
$timeout = 10; 
$http_auth_ident = 'xxxx:zzzzz'; // username:password 
$ch = curl_init($url); 

curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); 
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 

if (preg_match('`^http://`i', $url)) 
{ 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
} 

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Retourner le contenu téléchargé dans une chaine (au lieu de l'afficher directement)
curl_setopt($ch, CURLOPT_HEADER, false); // Ne pas inclure l'entête de réponse du serveur dans la chaine retournée)         => false, // Ne pas     inclure l'entête de réponse du serveur dans la chaine retournée

// Définition de la méthode d'authentification du serveur 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 

// Définition des identifiants 
curl_setopt($ch, CURLOPT_USERPWD, $http_auth_ident); 

$serveur = curl_exec($ch); // Le contenu téléchargé est enregistré dans la variable $serveur_content.

curl_close($ch);
?>
    <?php 
// Connection au serveur
$url = 'http://XXX/Medias/Photo/'; 
Require_once CORE.DS.'connectwebdav.php';
//-------------------------
require_once CORE.DS.'simple_html_dom.php';
$html = new simple_html_dom();
$html->load($serveur);
foreach ($html->find('h1') as $title):{
$title->outertext = '';
}
endforeach;
foreach ($html->find('a') as $a):{ // je cherche les liens
$a->id="lien1";
$newhref = $url.$a->href; //je fabrique la nouvelle adresse
$a->href = $newhref; // je change l'adresse du lien
$a->target="_blank"; // j'oblige à ouvrir le lien vers Webdav dans un nouvel onglet pour pas perdre ma page du site

}
endforeach;
$photo = $html->save();  //je sauvegarde
echo $photo;

Seulement, on clic que des liens vers des dossiers qui s'ouvre avec WebDav, qui ont des sous dossiers, qui ont des photos.

Je souhaiterais faire en sorte qu'en cliquant, les sous dossiers s'affichent sur la page du site, qui soit cliquable a nouveau pour afficher la "galerie" souhaitée.

J'ai donc plusieurs problemes a résoudre:

  • faire en sorte que de nouveaux liens s'affichent ( js -> on clic ? + nouvelle fabrication du lien ?)
  • Faire en sorte que tant qu'il y a des sous dossiers, l'opération se renouvelle,
  • faire en sorte qu'au dernier sous-dossier, les photos s'affichent et qu'elles soient sous forme de galerie et non de liste.

Quel est votre avis, svp ? comment faire une sorte de boucle en cliquant ? suis-je sur une bonne voie ?

Edit: je suis dessus depuis tout à l'heure, et en fait, je n'arrives pas a voir comment prendre le problème...