I don't believe the ftps implementation handles implicit ssl connections, having spent 2 days messing to get it to work in both php4 and 5. There is no mention of explicit vs implicit in the docs which backs this up.
I therefore ended up using an alternative ftp implementation class to successfully connect to an implicit ssl ftp server.
It is a php5 class. You can download the class file here:
http://kacke.de/php_samples/source.php?f=ftp.cls.php
It is fairly self explanatory if you read the public functions. Here's a usage example:
<?php
include "ftp.cls.php";
$ftpconn= new ftp();
$ftpconn->debug=true; //Comment out or set to false for silent mode!
// set up basic ssl connection
if(!$ftpconn->ftp_connect("your_ftps_host.com",990,"SSL")) //990 is the standard implicit ssl port
{
echo "Error: <br/>Unable to open SSL connection<br />";
} else {
// login with username and password
if($ftpconn->ftp_login("username", "password"))
{
//Change the directory
$ftpconn->ftp_chdir("/parent/child");
//Upload the file
$ftpconn->ftp_put("remotenamehere.txt",
"pathtofile/localfilenamehere.txt");
$ftpconn->ftp_quit();
echo "Upload Done.<br />";
} else {
echo "Error:<br/>Unabe to login in.<br />";
}
}
?>
Thank you Topi for getting me out of a hole!
ftp_ssl_connect
(PHP 4 >= 4.3.0, PHP 5)
ftp_ssl_connect — Ouvre une connexion FTP sécurisée avec SSL
Description
ftp_ssl_connect() ouvre une connexion FTP sécurisée avec SSL sur l'hôte host spécifié.
Note: Pourquoi cette fonction peut ne pas exister ?
ftp_ssl_connect() n'est disponible que si le module ftp et le support OpenSSL sont compilés statiquement dans PHP, cela signifie que, sous Windows, cette fonction sera indéfinie dans la version officielle de PHP. Afin d'utiliser cette fonction sous Windows, vous devez compiler vos propres binaires PHP.
Liste de paramètres
- host
-
L'adresse FTP du serveur. Ce paramètre ne doit pas comporter de slash final et ne doit pas être préfixé par ftp://.
- port
-
Ce paramètre spécifie un port alternatif de connexion. S'il est omis ou défini à zéro, alors le port par défaut FTP, 21, sera utilisé.
- timeout
-
Ce paramètre spécifie le délai de connexion pour toutes les opérations sur le réseau. S'il est omis, la valeur par défaut sera de 90 secondes. Ce délai de connexion peut être modifié et consulté à tout moment avec les fonctions ftp_set_option() et ftp_get_option().
Valeurs de retour
Retourne un flux SSL-FTP en cas de succès ou FALSE si une erreur survient.
Historique
| Version | Description |
|---|---|
| 5.2.2 | Cette fonction retourne FALSE lorsqu'elle ne peut pas utiliser une connexion SSL, au lieu d'utiliser à la place une connexion non-SSL. |
Exemples
Exemple #1 Exemple avec ftp_ssl_connect()
<?php
// Mise en place d'une connexion basique
$conn_id = ftp_ssl_connect($ftp_server);
// Identification avec un nom d'utilisateur et un mot de passe
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
echo ftp_pwd($conn_id); // /
// Fermeture de la connexion SSL
ftp_close($conn_id);
?>
ftp_ssl_connect
01-Apr-2009 08:32
16-Oct-2007 05:00
For those of you that see this for the first time and might be discouraged from having to compile PHP, please take a look at this page: http://www.deciacco.com/blog/archives/124
09-Feb-2005 03:24
I wasted a lot of time trying to get FTP over SSL/TLS working in PHP on Windows OS (with precompiled SSL PHP-packages etc.). However, it never worked for me.
I'm happy I found a nice solution now:
using "MovieIt Freely", a commandline FTP-Client, freeware at http://www.standardnetworks.com.
A nice tool that worked on all SSL/TLS-enabled FTP-Server for me.
Its easy to get it to interact with PHP:
a) Create a temporary batch-txt-file and therein write all your commands to be performed
b) then launch the program with exec() or backticks, let MovieIt read the batch-txt-file and forward/write down the log/results in a temporary results-txt-file
c) Finally read the log/results-txt-file
Check the manual for details.
Hope it helps. Cheers!
16-Jul-2004 01:08
Since ftp_ssl_connect() requires SSL compiled into PHP, Windows users will need to compile their own PHP this way or download it from another source. Here's one such (and trusted) source:
* http://ftp.emini.dk/pub/php/win32/openssl/
22-Jan-2004 02:56
Just remember: SSL FTP != SFTP
Differences: an SSL FTP connects on port 990, and you need an ftp server which will support this (seems like none in the SuSE linux distribution do). Even if you get this function to work, and it connects ok to a normal FTP server on port 21, data WILL NOT BE ENCRYPTED. If you don't believe me, go sniff it yourself!
