2014-05-07 4 views
0

J'essaye de télécharger un fichier sur le serveur sftp en utilisant la bibliothèque phpseclib. Voici le code que j'ai écritAppel PHPSECLIB à la fonction indéfinie crypt_random_string()

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib0.3.5'); 
    $fileName = "sImg3.jpeg"; 
    $fileData = file_get_contents($fileName); 
    $b64Data = base64_encode($fileData); 

    // upload the file to ftp server 
    include('Net/SFTP.php'); 
    include_once('include/config.php'); // contains sftp connection details 

    $sftp = new Net_SFTP($ftpHost); 
    if (!$sftp->login($ftpUser, $ftpPasswd)) 
    { 
     die("Failed to connect to SFTP server"); 
    } 
    else 
    { 
     $sftp->put($filename,$b64Data); 
     echo "Uploaded the file (".$filename.")\n"; 
    } 

Lorsque je tente de lancer, je suis en train de « PHP Fatal error: Call to undefined function crypt_random_string() dans /var/www/phpseclib0.3.5/Net/SSH2 .php sur la ligne 1014 ".

J'ai installé php5-mcrypt et phpseclib. Dois-je installer d'autres dépendances pour phpseclib? S'il vous plaît, faites-moi savoir.

Merci beaucoup à l'avance, Cordialement, Sudheer

Répondre

0

crypt_string_random est défini dans la crypte/Random.php:

https://github.com/phpseclib/phpseclib/blob/0.3.5/phpseclib/Crypt/Random.php

Mais à nouveau auto-Net_SSH2 comprend Crypte/Random.php:

https://github.com/phpseclib/phpseclib/blob/0.3.5/phpseclib/Net/SSH2.php#L749

Et Net_SF TP étend Net_SSH2:

https://github.com/phpseclib/phpseclib/blob/0.3.5/phpseclib/Net/SFTP.php#L253

Et Net_SSH2 fait un require_once si tout ce que vous devriez obtenir une sorte de « fichier introuvable » erreur, si vous obtenez une erreur du tout, pas une « fonction non erreur définie "

+0

Merci pour votre réponse. Oui, j'ai vérifié le code que vous avez mentionné ci-dessus. Et c'est l'erreur que je reçois! C'est une erreur 'fonction non définie' et non une erreur 'fichier non trouvé'. Vraiment confus sur pourquoi je vois la fonction erreur non définie. – user591912

+0

Et si vous mettez un 'echo 'aussi loin x1
\ r \ n" 'juste avant le' require_once' dans Net/SSH2.php et un 'echo" aussi loin x2
\ r \ n "' juste après? – neubert

+0

J'ai essayé cela. Ajouté cet écho "this far x1
\ r \ n"; if (! Function_exists ('crypt_random_string')) { echo "jusqu'à présent x2
\ r \ n"; require_once ('Crypt/Aléatoire.php '); echo "ce loin x3
\ r"; } Et, voici la sortie que je suis arrivé « loin x1
loin x2
loin x3
PHP Fatal error: Call to undefined function crypt_random_string() dans /var/www/phpseclib0.3.5/Net/SSH2 .php sur la ligne 1017 " – user591912

0

Le problème est dû à la manière dont PHP traite les instructions d'inclusion imbriquées et les chemins relatifs. Si vous regardez la programmation actuelle de phpseclib, au moins 'certains' des include utilisent toujours include() au lieu de require_once() qui échouent silencieusement - ce qui explique pourquoi vous ne voyez pas les erreurs sur les échecs inclus. Tout dépend de la manière dont PHP résout le chemin relatif des inclusions imbriquées - en utilisant l'emplacement de départ du script parent ou l'emplacement de départ du script actuel/enfant. Plus d'informations sur l'énigme de PHP imbriqué comprend avec pathing par rapport ici:

php nested include behavior

Quand je suis tombé sur ce problème moi-même, je travaille autour de lui en faisant la promotion/phpseclib de son propre sous-dossier et dans mon existant/includes dossier. Ensuite, je n'inclue que les fichiers phpseclib dans les scripts php dans mon dossier/includes afin que les chemins relatifs dans les instructions include imbriquées de phpseclib fonctionnent.

Questions connexes