Re: FTP Class Connection Error
| From: | Aziz Saleh | Date: | Thu, 13 Feb 2014 20:19:15 +0000 |
| Subject: | Re: FTP Class Connection Error | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-322860@lists.php.net to get a copy of this message | ||
On Thu, Feb 13, 2014 at 12:58 PM, Ron Piggott <
ron.piggott@actsministries.org> wrote:
> Good afternoon.
>
> I have just begun creating my own classes. I am struggling to understand
> how to pass the FTP connection ‘resource’ to the various functions. When I
> run this class the FTP server connection appears to be timing out from an
> unsuccessful login (with the command “setFtpLogin”). The database
> functions retrieving server & login credentials are both working and
> returning the expected values.
>
> As I look over my programming to create this e-mail I *think* some of my
> problem is partially with my use of “$this->connection”. I am unsure of
> how to correctly code the FTP connection resource within the context of a
> class.
>
> I am receiving the following 2 errors:
>
> PHP Warning: ftp_login() expects parameter 1 to be resource, boolean given
> PHP Warning: ftp_close() expects parameter 1 to be resource, null given
>
> For anyone who is able to respond I am not just looking for an answer. I
> want to learn at the same time. If you are able to give me a small
> explanation I would very much appreciate it.
>
> This is the code which uses the FTP class:
>
> <?php
>
> # create backup class
>
> $remote_backup = new remote_backup();
>
> # connect to FTP server
>
> $ftp_login_server = $remote_backup->getFtpLoginServer( );
> $connection = $remote_backup->setFtpConnection(
> $ftp_login_server['host'] , $ftp_login_server['port'] ,
> $ftp_login_server['timeout'] );
>
> # login to FTP server
>
> $ftp_login_credential = $remote_backup->getFtpLoginCredential( );
> $remote_backup->setFtpLogin( $ftp_login_credential['username'] ,
> $ftp_login_credential['password'] );
>
> # disconnect from FTP server
>
> $remote_backup->closeFtpConnection( );
>
> ?>
>
> This is the actual class with functions related to the above code:
>
> <?php
>
> class remote_backup {
>
> public $connection;
>
> /**
> * Get FTP Login Server
> *
> * @return mixed
> */
> public function getFtpLoginServer( ) {
>
> $dsh = "mysql:host=localhost;dbname=" .
> $MariaDB['db']['database'];
> $dbh = new PDO($dsh, $MariaDB['db']['username'],
> $MariaDB['db']['password']);
>
> $query = "SELECT
host,
> port, timeout FROM
> remote_backup_login WHERE
> date_effective <= UTC_TIMESTAMP() ORDER BY
> date_effective DESC LIMIT 1";
>
> if ($stmt = $dbh->prepare($query)) {
>
> if ($stmt->execute() or die(print_r($stmt->errorInfo(),
> true))) {
>
> while ($row = $stmt->fetch()) {
> $ftp_login_server['host'] = stripslashes( $row['host']
> );
> $ftp_login_server['port'] = $row['port'];
> $ftp_login_server['timeout'] = $row['timeout'];
> }
> }
> }
>
> unset($dbh);
>
> if ( isset( $ftp_login_server ) ) {
>
> return $ftp_login_server;
>
> } else {
>
> return NULL;
>
> }
>
> }
>
> /**
> * Set FTP Connection
> *
> * @param string $host
> * @param int $port
> * @param int $timeout
> *
> * @return $this
> */
> public function setFtpConnection( $host , $port , $timeout ) {
>
> $this->connection = ftp_connect( $host , $port , $timeout );
>
> return $this;
>
> }
>
> /**
> * Get FTP Connection
> *
> * @return mixed
> */
> public function getFtpConnection( ) {
>
> return $this->connection;
>
> }
>
> /**
> * Get FTP Login Credential
> *
> * @return mixed
> */
> public function getFtpLoginCredential( ) {
>
> $dsh = "mysql:host=localhost;dbname=" .
> $MariaDB['db']['database'];
> $dbh = new PDO($dsh, $MariaDB['db']['username'],
> $MariaDB['db']['password']);
>
> $query = "SELECT username,
> password FROM
> remote_backup_login WHERE
> date_effective <= UTC_TIMESTAMP() ORDER BY
> date_effective DESC LIMIT 1";
>
> if ($stmt = $dbh->prepare($query)) {
>
> if ($stmt->execute() or
> die(print_r($stmt->errorInfo(), true))) {
>
> while ($row = $stmt->fetch()) {
> $ftp_login_credential['username'] =
> stripslashes( $row['username'] );
> $ftp_login_credential['password'] =
> stripslashes( $row['password'] );
> }
> }
> }
>
> unset($dbh);
>
> if ( isset( $ftp_login_credential ) ) {
>
> return $ftp_login_credential;
>
> } else {
>
> return NULL;
>
> }
>
> }
>
> /**
> * Set FTP Login
> *
> * @param string $username
> * @param string $password
> *
> * @return $this
> */
> public function setFtpLogin( $username , $password ) {
>
> $this->connection = ftp_login( $this->getFtpConnection() ,
> $username , $password );
>
> return $this;
>
> }
>
> /**
> * Close FTP Connection
> */
> public function closeFtpConnection() {
> ftp_close( $this->getFtpConnection() );
>
> return;
> }
>
> }
>
> ?>
>
> Thank you for your help.
>
> Ron
>
> Ron Piggott
>
>
>
> www.TheVerseOfTheDay.info
>
I can see an issue right off the bat with the setFtpLogin() method.
ftp_login returns a boolean which you are storing (over riding ftp
connection resource) that boolean in the connection variable
($this->connection gets lost).
Aziz