Danny620 Posted November 8, 2012 Share Posted November 8, 2012 <?php Class FTPClient { private $connectionId; private $loginOk = false; private $messageArray = array(); public function __construct() { } private function logMessage($message, $clear=true) { if ($clear) {$this->messageArray = array();} $this->messageArray[] = $message; } public function getMessages() { return $this->messageArray; } public function connect ($server, $ftpUser, $ftpPassword, $isPassive = false) { // *** Set up basic connection $this->connectionId = ftp_connect($server); // *** Login with username and password $loginResult = ftp_login($this->connectionId, $ftpUser, $ftpPassword); // *** Sets passive mode on/off (default off) ftp_pasv($this->connectionId, $isPassive); // *** Check connection if ((!$this->connectionId) || (!$loginResult)) { $this->logMessage('FTP connection has failed!'); $this->logMessage('Attempted to connect to ' . $server . ' for user ' . $ftpUser, true); return false; } else { $this->logMessage('Connected to ' . $server . ', for user ' . $ftpUser); $this->loginOk = true; return true; } } public function makeDir($directory) { // *** If creating a directory is successful... if (@ftp_mkdir($this->connectionId, $directory)) { $this->logMessage('Directory "' . $directory . '" created successfully'); return true; } else { // *** ...Else, FAIL. $this->logMessage('Failed creating directory "' . $directory . '"'); return false; } } public function uploadFile ($fileFrom, $fileTo) { // *** Set the transfer mode $asciiArray = array('txt', 'csv'); $extension = end(explode('.', $fileFrom)); if (in_array($extension, $asciiArray)) { $mode = FTP_ASCII; } else { $mode = FTP_BINARY; } // *** Upload the file $upload = ftp_put($this->connectionId, $fileTo, $fileFrom, $mode); // *** Check upload status if (!$upload) { $this->logMessage('FTP upload has failed!'); return false; } else { $this->logMessage('Uploaded "' . $fileFrom . '" as "' . $fileTo); return true; } } public function ftp_putAll ($src_dir, $dst_dir) { $d = dir($src_dir); while($file = $d->read()) { // do this for each file in the directory if ($file != "." && $file != "..") { // to prevent an infinite loop if (is_dir($src_dir."/".$file)) { // do the following if it is a directory if (!@ftp_chdir($this->connectionId, $dst_dir."/".$file)) { ftp_mkdir($this->connectionId, $dst_dir."/".$file); // create directories that do not yet exist } $this->ftp_putAll($this->connectionId, $src_dir."/".$file, $dst_dir."/".$file); // recursive part } else { $upload = ftp_put($this->connectionId, $dst_dir."/".$file, $src_dir."/".$file, FTP_BINARY); // put the files } } } $d->close(); } public function changeDir($directory) { if (ftp_chdir($this->connectionId, $directory)) { $this->logMessage('Current directory is now: ' . ftp_pwd($this->connectionId)); return true; } else { $this->logMessage('Couldn\'t change directory'); return false; } } public function getDirListing($directory = '.', $parameters = '-la') { // get contents of the current directory $contentsArray = ftp_nlist($this->connectionId, $parameters . ' ' . $directory); return $contentsArray; } public function downloadFile ($fileFrom, $fileTo) { // *** Set the transfer mode $asciiArray = array('txt', 'csv'); $extension = end(explode('.', $fileFrom)); if (in_array($extension, $asciiArray)) { $mode = FTP_ASCII; } else { $mode = FTP_BINARY; } // open some file to write to //$handle = fopen($fileTo, 'w'); // try to download $remote_file and save it to $handle if (ftp_get($this->connectionId, $fileTo, $fileFrom, $mode, 0)) { return true; $this->logMessage(' file "' . $fileTo . '" successfully downloaded'); } else { return false; $this->logMessage('There was an error downloading file "' . $fileFrom . '" to "' . $fileTo . '"'); } } public function __deconstruct() { if ($this->connectionId) { ftp_close($this->connectionId); } } } // *** Define your host, username, and password define('FTP_HOST', 'ftp.xxxx.co.uk'); define('FTP_USER', 'xxxx.co.uk'); define('FTP_PASS', 'xxxx'); define('INSTALLPATH', '/public_html/'); // *** Include the class include('ftp_class.php'); // *** Create the FTP object $ftpObj = new FTPClient(); // *** Connect if ($ftpObj -> connect(FTP_HOST, FTP_USER, FTP_PASS)) { $dir = INSTALLPATH . 'newshub'; // *** Make directory $ftpObj->makeDir($dir); print_r($ftpObj -> getMessages()); $ftpObj->ftp_putAll('/Applications/XAMPP/xamppfiles/htdocs/newshub', '/public_html/newshub'); }else{ print_r($ftpObj -> getMessages()); } ?> Array ( [0] => Failed creating directory "/public_html/newshub" ) Warning: dir() expects parameter 1 to be string, resource given in /Applications/XAMPP/xamppfiles/htdocs/ftp_class.php on line 93 Fatal error: Call to a member function read() on a non-object in /Applications/XAMPP/xamppfiles/htdocs/ftp_class.php on line 95 Link to comment https://forums.phpfreaks.com/topic/270452-errors-are-driving-me-crazy/ Share on other sites More sharing options...
Andy123 Posted November 9, 2012 Share Posted November 9, 2012 You are calling ftp_putAll near the bottom of your script, which is fine. Then inside that function itself, you are making a recursive call where you are passing $this->connectionID as the first parameter. This parameter is then used in PHP's dir() function, which expects the parameter to be a string. However, $this->connectionID is a resource set by ftp_connect(). It returns the following: Returns a FTP stream on success or FALSE on error. In your case it returns a stream, which you are then trying to use with dir(), which expects a string, not a resource. Your warning tells you everything you need to know to find the problem. Link to comment https://forums.phpfreaks.com/topic/270452-errors-are-driving-me-crazy/#findComment-1391316 Share on other sites More sharing options...
jcbones Posted November 9, 2012 Share Posted November 9, 2012 You should also change: Line 77: while($file = $d->read()) To: while(false !== ($file = $d->read())) Link to comment https://forums.phpfreaks.com/topic/270452-errors-are-driving-me-crazy/#findComment-1391394 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.