2009-12-26 8 views
4

J'utilise Apache 2.2.13 et PHP 5.2.12. Juste installé PHP 5.2.12 manuellement (pour avoir accès à toutes les extensions) et activé OpenSSL. phpinfo() indique OpenSSL est activé et fonctionne OpenSSL 0.9.8k 25 mars 2009.OpenSSL activé mais ne fonctionne pas

Je reçois cette erreur: PHP Erreur fatale: Appel à la fonction indéfinie ftp_ssl_connect(). J'ai vu où le manuel PHP suggère 'ftp_ssl_connect() n'est disponible que si le module ftp et le support d'OpenSSL sont construits statiquement dans php' et ajoute que 'vous devez compiler vos propres binaires PHP' pour faire ça marche avec Windows. J'ai la suspicion que phpinfo() indique seulement OpenSSL comme étant 'activé' parce que j'ai décommenté la ligne 'extension = php_openssl.dll' et ai les dlls corrects dans les dossiers corrects et le chemin correct dans les variables d'environnement . Et peut-être qu'une construction statique dans PHP doit être accomplie indépendamment de ce que phpinfo() indique. Je crois que l'objectif de la distribution (comme décrit ci-dessus) est pour les extensions dynamiques, mais la recompilation (pour OpenSSL) consiste à coder une extension statique.

L'extension ftp fonctionne bien (intégrée à PHP 5.2). Je le teste avec le code suivant:

$ conn_id = ftp_connect ($ url); $ login_result = ftp_login ($ conn_id, $ nom d'utilisateur, $ mot de passe); ftp_close ($ conn_id);

Notez que pour vérifier ssl, je ne change que ftp_connect à ftp_ssl_connect. Lorsque j'atteins cette ligne, j'obtiens l'erreur PHP ci-dessus dans mon fichier journal d'erreurs Apache.

Répondre

4

Comme le documentation states(citant ce que vous avez déjà cité):

Note: Why this function may not exist
ftp_ssl_connect() is only available if both the ftp module and the OpenSSL support is built statically into php, this means that on Windows this function will be undefined in the official PHP builds.
To make this function available on Windows you must compile your own PHP binaries.

Vous vous dites installé PHP "manuellement"; mais cela signifie probablement que vous avez utilisé une construction "officielle" de php.net - ce qui signifie que vous n'avez pas compilé vos propres binaires PHP ... Donc, cette fonction n'est pas disponible.


Il n'y a pas de magie: il semble que vous devrez re-compiler PHP, en utilisant les options de configuration droite à la compilation, si vous voulez être en mesure d'utiliser cette fonction ...

Voici quelques documents à ce sujet: Build your own PHP on Windows - mais ... bonne chance ... je n'ai jamais entendu dire qu'il était "simple" de compiler PHP sous Windows, en fait (ce n'est pas si difficile sur Linux, mais Linux est peut-être un peu plus bien adapté quand il s'agit de compilation)


Un couple d'autres solutions:

  • passer à Linux pour vos développements (même si elle est seulement à l'aide d'une machine virtuelle) - mais vous pourriez encore avoir à recompiler PHP pour obtenir ce (ne soit pas activée par défaut)
  • n'utilisant simplement pas cette fonction; Après tout, savez-vous si votre service d'hébergement vous le fournira?(Si vous ne pouvez pas l'utiliser sur votre serveur de production, pas besoin d'utiliser sur votre développement/machine d'essai)
+0

Oui, je ne téléchargé la construction et ne compile pas la source. J'ai besoin de vérifier mon hôte pour voir s'il va le fournir (je m'attends à ce qu'ils utilisent FreeBSD). Mon objectif est de coder la sauvegarde ftp automatique en toute sécurité. Je peux continuer à chercher une solution plus appropriée. Merci. – mitch

+0

J'ai également rencontré ce problème et j'ai réussi à compiler les binaires en utilisant à la place un programme FTP tiers avec des fonctionnalités de script. Vous pouvez définir les fichiers à sauvegarder, quand ils sont sauvegardés, et toutes les options de sécurité dont vous avez besoin. WS_FTP et WinSCP sont quelques bonnes options gratuites pour regarder dans ce support SSL et script. En fonction de ce qui est requis pour votre sauvegarde, les tâches de base peuvent être définies via une interface graphique si vous êtes plus à l'aise avec cela. Si vous êtes coincé dans un environnement où vous ne vous sentez pas à l'aise, c'est peut-être votre meilleure option. –

Questions connexes