قضى بي الجلوس امام الحاسوب الى كتابة كلاس للتعامل مع FTP بطريقة Logs
كبرامج FTP لكن كموقع , حيث يمكنك تسخيره و مع بعض التقنيات الحديثة تحويله الى CLoud App يستعمل في Web Os
المهم ما علينا , الان
الكلاس
رمز PHP:
server = $server;
$this->ftp_stream = ftp_connect($server);
$login = ftp_login($this->ftp_stream,$user,$pass);
ftp_pasv($this->ftp_stream,$isPassive);
if(!$this->ftp_stream or !$login){
$this->log_message("Impossible de se connecter au serveur $server");
}else{
$this->log_message(Connected to . $server . , for user . $user );
$this->login = true;
}
}
/*
* Retourne un identifiant de type de serveur FTP
*/
public function system_type(){
$type = ftp_systype($this->ftp_stream);
if($type){
$this->log_message("$this->server exécuté par $type");
return true;
}else{
$this->log_message("Impossible de récupérer le type du serveur");
return false;
}
}
/*
* log a message
* @param : String message
*/
private function log_message($message){
array_push($this->messages,utf8_decode($message));
}
/*
* get all log messages
* @return : Array messages
*/
public function get_messages(){
return $this->messages;
}
/*
* get the extension of file
* @param : String file name
* @return : String file extension
*/
private function get_extension($file){
if(function_exists("pathinfo")){
$ext = pathinfo($file,PATHINFO_EXTENSION);
}else{
$ext = end(explode(".",$file));
}
return strtolower(trim($ext));
}
/*
* make a directory
* @param : String dir name
*/
public function make_dir($dir){
if(!ftp_chdir($this->ftp_stream,$dir)){
$this->log_message("Le dossier $dir est déja exists");
return false;
}else{
$make = ftp_mkdir($this->ftp_stream,$dir);
if($make){
$this->log_message("Le dossier $dir a été créé avec succès");
return true;
}else{
$this->log_message("Il y a eu un problème lors de la création du dossier $dir");
return false;
}
}
}
/*
* change current directory
* @param :String dir name
*/
public function change_dir($dir){
$changedir = ftp_chdir($this->ftp_stream,$dir);
if($changedir){
$this->log_message("Le dossier courant est maintenant : " . ftp_pwd($this->ftp_stream));
return true;
}else{
$this->log_message("Impossible de changer de dossier");
return false;
}
}
/*
* remove a directory
* @param: string dir name
*/
public function remove_dir($dir){
$remove_dir = ftp_rmdir($this->ftp_stream,$dir);
if($remove_dir){
$this->log_message("Le dossier $dir a été effacé avec succès");
return true;
}else{
$this->log_message("Il y a eu un problème lors de leffacement du dossier $dir");
return false;
}
}
/*
* current dir
*/
public function current_dir(){
$current = ftp_pwd($this->ftp_stream);
if($current){
$this->log_message("Current dossier $current");
return true;
}else{
$this->log_message("Il y a eu un problème lors de get current dossier");
return false;
}
}
/*
* Change de dossier et passe au dossier parent
*/
public function parent_dir(){
$parent = ftp_cdup($this->ftp_stream);
if($parent){
$this->log_message("Current dossier ".ftp_pwd($this->ftp_stream));
return true;
}else{
$this->log_message("Il y a eu un problème lors de get current dossier");
return false;
}
}
/*
* Retourne la liste des fichiers dun dossier
* @param : String Le dossier à lister
* @param : String des arguments
*/
public function get_dir_list($dir=".",$parametrs= "-la"){
$dirs = ftp_nlist($this->ftp_stream,$parametrs." ".$dir);
return $dirs;
}
/*
* Renomme un fichier sur un serveur FTP
* @param :String Lancien nom du dossier / fichier.
* @param :String Le nouveau nom.
*/
public function rename($oldName,$newName){
$rename = ftp_rename($this->ftp_stream,$oldName,$newName);
if($rename){
$this->log_message("Renommage avec succès de $oldName en $newName");
return true;
}else{
$this->log_message("Il y a eu un problème lors du renommage de $oldName en $newName");
return false;
}
}
/*
* Retourne la date de dernière modification dun fichier sur un serveur FTP
* @param : String Le fichier depuis lequel on doit extraire la date de dernière modification.
*/
function filemtime($file){
$filemtime = ftp_mdtm($this->ftp_stream);
if($filemtime != -1){
$this->log_message("$file a été modifié pour la dernière fois : " . date("F d Y H:i:s.", $filemtime));
return true;
}else{
$this->log_message("Impossible de récupérer mdtime");
return false;
}
}
/*
* retourne la taille dun fichier donné en octets.
* @param : String Le fichier distant.
*/
public function file_size($file){
$size = ftp_size($this->ftp_stream, $file);
if ($size != -1) {
$this->log_message("La taille du fichier $file est de $size octets");
return true;
} else {
$this->log_message("Impossible de récupérer la taille du fichier");
return false;
}
}
/*
* efface le fichier sur un serveur FTP
* @param : String Le fichier à effacer.
*/
public function delete_file($file){
$delete = ftp_delete($this->ftp_stream,$file);
if ($delete) {
$this->log_message("$file effacé avec succès");
return true;
} else {
$this->log_message("Impossible deffacer le fichier $file");
return false;
}
}
/*
* change le chmod de file
* @param : String Le fichier distant.
* @param : Int La nouvelle permission, donnée en tant que valeur octale.
*/
public function chmod_file($file,$mode){
$chmod = ftp_chmod($this->ftp_stream,$mode,$file);
if($chmod !== false){
$this->log_message("Les permissions du fichier $file ont été modifiées avec succès en $mode");
} else {
$this->log_message("Impossible de modifier les permissions du fichier $file");
}
}
/*
* download a file from ftp
* @Param : Le chemin vers le fichier local
* @param : Le chemin vers le fichier distant.
*/
public function download_file($fileFrom,$FileTo){
$extension = $this->get_extension($fileFrom);
if(in_array($extension,$this->ascii_extensions)){
$mode = FTP_ASCII;
}else{
$mode = FTP_BINARY;
}
$download = ftp_get($this->ftp_stream,$FileTo,$fileFrom,$mode,0);
if($download){
$this->log_message("Le fichier $FileTo a été écris avec succès");
return true;
}else{
$this->log_message("Il y a un problème dans le download de $FileTo");
return false;
}
}
/*
* upload a file to ftp
* @param : String Le chemin vers le fichier distant.
* @param : String Le chemin vers le fichier local.
*/
public function upload_file($fileFrom,$FileTo){
$extension = $this->get_extension($fileFrom);
if(in_array($extension,$this->ascii_extensions)){
$mode = FTP_ASCII;
}else{
$mode = FTP_BINARY;
}
$upload = ftp_put($this->ftp_stream,$fileTo,$fileFrom,$mode);
if(!$upload){
$this->log_message("FTP upload of $fileTo has failed!");
return false;
}else{
$this->log_message("Uploaded $fileFrom to $this->ftp_stream as $fileTo");
return true;
}
}
public function __destruct(){
if($this->ftp_stream){
if(function_exists("ftp_close")){
$quit = ftp_close($this->ftp_stream);
}else{
$quit = ftp_quit($this->ftp_stream);
}
if($quit){
$this->log_message("FTP deconnection success");
return true;
}else{
$this->log_message("FTP deconnection has failed");
return false;
}
}
}
}
?>
$this->ftp_stream = ftp_connect($server);
$login = ftp_login($this->ftp_stream,$user,$pass);
ftp_pasv($this->ftp_stream,$isPassive);
if(!$this->ftp_stream or !$login){
$this->log_message("Impossible de se connecter au serveur $server");
}else{
$this->log_message(Connected to . $server . , for user . $user );
$this->login = true;
}
}
/*
* Retourne un identifiant de type de serveur FTP
*/
public function system_type(){
$type = ftp_systype($this->ftp_stream);
if($type){
$this->log_message("$this->server exécuté par $type");
return true;
}else{
$this->log_message("Impossible de récupérer le type du serveur");
return false;
}
}
/*
* log a message
* @param : String message
*/
private function log_message($message){
array_push($this->messages,utf8_decode($message));
}
/*
* get all log messages
* @return : Array messages
*/
public function get_messages(){
return $this->messages;
}
/*
* get the extension of file
* @param : String file name
* @return : String file extension
*/
private function get_extension($file){
if(function_exists("pathinfo")){
$ext = pathinfo($file,PATHINFO_EXTENSION);
}else{
$ext = end(explode(".",$file));
}
return strtolower(trim($ext));
}
/*
* make a directory
* @param : String dir name
*/
public function make_dir($dir){
if(!ftp_chdir($this->ftp_stream,$dir)){
$this->log_message("Le dossier $dir est déja exists");
return false;
}else{
$make = ftp_mkdir($this->ftp_stream,$dir);
if($make){
$this->log_message("Le dossier $dir a été créé avec succès");
return true;
}else{
$this->log_message("Il y a eu un problème lors de la création du dossier $dir");
return false;
}
}
}
/*
* change current directory
* @param :String dir name
*/
public function change_dir($dir){
$changedir = ftp_chdir($this->ftp_stream,$dir);
if($changedir){
$this->log_message("Le dossier courant est maintenant : " . ftp_pwd($this->ftp_stream));
return true;
}else{
$this->log_message("Impossible de changer de dossier");
return false;
}
}
/*
* remove a directory
* @param: string dir name
*/
public function remove_dir($dir){
$remove_dir = ftp_rmdir($this->ftp_stream,$dir);
if($remove_dir){
$this->log_message("Le dossier $dir a été effacé avec succès");
return true;
}else{
$this->log_message("Il y a eu un problème lors de leffacement du dossier $dir");
return false;
}
}
/*
* current dir
*/
public function current_dir(){
$current = ftp_pwd($this->ftp_stream);
if($current){
$this->log_message("Current dossier $current");
return true;
}else{
$this->log_message("Il y a eu un problème lors de get current dossier");
return false;
}
}
/*
* Change de dossier et passe au dossier parent
*/
public function parent_dir(){
$parent = ftp_cdup($this->ftp_stream);
if($parent){
$this->log_message("Current dossier ".ftp_pwd($this->ftp_stream));
return true;
}else{
$this->log_message("Il y a eu un problème lors de get current dossier");
return false;
}
}
/*
* Retourne la liste des fichiers dun dossier
* @param : String Le dossier à lister
* @param : String des arguments
*/
public function get_dir_list($dir=".",$parametrs= "-la"){
$dirs = ftp_nlist($this->ftp_stream,$parametrs." ".$dir);
return $dirs;
}
/*
* Renomme un fichier sur un serveur FTP
* @param :String Lancien nom du dossier / fichier.
* @param :String Le nouveau nom.
*/
public function rename($oldName,$newName){
$rename = ftp_rename($this->ftp_stream,$oldName,$newName);
if($rename){
$this->log_message("Renommage avec succès de $oldName en $newName");
return true;
}else{
$this->log_message("Il y a eu un problème lors du renommage de $oldName en $newName");
return false;
}
}
/*
* Retourne la date de dernière modification dun fichier sur un serveur FTP
* @param : String Le fichier depuis lequel on doit extraire la date de dernière modification.
*/
function filemtime($file){
$filemtime = ftp_mdtm($this->ftp_stream);
if($filemtime != -1){
$this->log_message("$file a été modifié pour la dernière fois : " . date("F d Y H:i:s.", $filemtime));
return true;
}else{
$this->log_message("Impossible de récupérer mdtime");
return false;
}
}
/*
* retourne la taille dun fichier donné en octets.
* @param : String Le fichier distant.
*/
public function file_size($file){
$size = ftp_size($this->ftp_stream, $file);
if ($size != -1) {
$this->log_message("La taille du fichier $file est de $size octets");
return true;
} else {
$this->log_message("Impossible de récupérer la taille du fichier");
return false;
}
}
/*
* efface le fichier sur un serveur FTP
* @param : String Le fichier à effacer.
*/
public function delete_file($file){
$delete = ftp_delete($this->ftp_stream,$file);
if ($delete) {
$this->log_message("$file effacé avec succès");
return true;
} else {
$this->log_message("Impossible deffacer le fichier $file");
return false;
}
}
/*
* change le chmod de file
* @param : String Le fichier distant.
* @param : Int La nouvelle permission, donnée en tant que valeur octale.
*/
public function chmod_file($file,$mode){
$chmod = ftp_chmod($this->ftp_stream,$mode,$file);
if($chmod !== false){
$this->log_message("Les permissions du fichier $file ont été modifiées avec succès en $mode");
} else {
$this->log_message("Impossible de modifier les permissions du fichier $file");
}
}
/*
* download a file from ftp
* @Param : Le chemin vers le fichier local
* @param : Le chemin vers le fichier distant.
*/
public function download_file($fileFrom,$FileTo){
$extension = $this->get_extension($fileFrom);
if(in_array($extension,$this->ascii_extensions)){
$mode = FTP_ASCII;
}else{
$mode = FTP_BINARY;
}
$download = ftp_get($this->ftp_stream,$FileTo,$fileFrom,$mode,0);
if($download){
$this->log_message("Le fichier $FileTo a été écris avec succès");
return true;
}else{
$this->log_message("Il y a un problème dans le download de $FileTo");
return false;
}
}
/*
* upload a file to ftp
* @param : String Le chemin vers le fichier distant.
* @param : String Le chemin vers le fichier local.
*/
public function upload_file($fileFrom,$FileTo){
$extension = $this->get_extension($fileFrom);
if(in_array($extension,$this->ascii_extensions)){
$mode = FTP_ASCII;
}else{
$mode = FTP_BINARY;
}
$upload = ftp_put($this->ftp_stream,$fileTo,$fileFrom,$mode);
if(!$upload){
$this->log_message("FTP upload of $fileTo has failed!");
return false;
}else{
$this->log_message("Uploaded $fileFrom to $this->ftp_stream as $fileTo");
return true;
}
}
public function __destruct(){
if($this->ftp_stream){
if(function_exists("ftp_close")){
$quit = ftp_close($this->ftp_stream);
}else{
$quit = ftp_quit($this->ftp_stream);
}
if($quit){
$this->log_message("FTP deconnection success");
return true;
}else{
$this->log_message("FTP deconnection has failed");
return false;
}
}
}
}
?>
طريقة الاستخدام
رمز PHP:
$ftp = new ftp("ftp.،،،،،،،،،","،،،،_8378869","root12");
اتصال بالسيرفر ,
لمعرفة النظام المستخدم في سيرفر FTP
رمز PHP:
$ftp->system_type();
طبعا كل شيئ , يتم في logs و سنتعرف كيفية عرض النتائج
للانتقال الىى مجلد معين
رمز PHP:
$ftp->change_dir("blog");
للانتقال الى المجلد الاب
رمز PHP:
$ftp->parent_dir();
لانشاء مجلد
رمز PHP:
$ftp->make_dir("test");
لحذف مجلد
رمز PHP:
$ftp->remove_dir("blog");
لرفع ملف
رمز PHP:
$ftp->upload_file("test.php","test/test.php");
لجلب حجم الملف
رمز PHP:
$ftp->file_size("test.php");
اخر تعديل للملف
رمز PHP:
$ftp->filemtime("test.php");
تحميل الملف
رمز PHP:
$ftp->download_file("test.php","test.php");
تغيير تصريح ملف معين
[php]
$ftp->chmod_file("test.php",0777);
[php]
حذف ملف
رمز PHP:
$ftp->delete_file("test.php");
لتغييير اسم ملف او مجلد
رمز PHP:
$ftp->rename("test","w3a");
جلب , ما يوجد في مجلد معين
رمز PHP:
print_r($ftp->get_dir_list("test/"));
لمعرفة المجلد الحالي
رمز PHP:
$ftp->current_dir();
لعرض logs
رمز PHP:
print_r($ftp->get_messages());
مثال لل logs
اقتباس:
Array
(
[0] => Connected to ftp.،،،،،،،،،, for user ،،،،_8378869
[1] => ftp.،،،،،،،،، exécuté par UNIX
[2] => Le dossier courant est maintenant : /blog
[3] => Current dossier /
[4] => Le dossier test est déja exists
[5] => Le dossier blog a été effacé avec succès
[6] => FTP upload of has failed!
[7] => Impossible de changer de dossier
[8] => Impossible de récupérer la taille du fichier
[9] => test.php a été modifié pour la dernière fois : January 01 1970 00:00:00.
[10] => Il y a un problème dans le download de test.php
)
(
[0] => Connected to ftp.،،،،،،،،،, for user ،،،،_8378869
[1] => ftp.،،،،،،،،، exécuté par UNIX
[2] => Le dossier courant est maintenant : /blog
[3] => Current dossier /
[4] => Le dossier test est déja exists
[5] => Le dossier blog a été effacé avec succès
[6] => FTP upload of has failed!
[7] => Impossible de changer de dossier
[8] => Impossible de récupérer la taille du fichier
[9] => test.php a été modifié pour la dernière fois : January 01 1970 00:00:00.
[10] => Il y a un problème dans le download de test.php
)