sftp.class.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <?php
  2. class sftp
  3. {
  4. private static $authent;
  5. private static $connexion;
  6. private static $dataSend;
  7. private static function connectHost(int $_sec = 2)
  8. {
  9. $originalConnectionTimeout = ini_get('default_socket_timeout');
  10. ini_set('default_socket_timeout', $_sec);
  11. if (self::$authent = @ssh2_connect(SFTP_HOST, 22)) {
  12. ini_set('default_socket_timeout', $originalConnectionTimeout);
  13. return TRUE;
  14. } else {
  15. return FALSE;
  16. }
  17. }
  18. private static function authentHost()
  19. {
  20. return (@ssh2_auth_password(self::$authent, SFTP_USER, SFTP_PASS)) ? TRUE : FALSE;
  21. }
  22. private static function initializeHost()
  23. {
  24. return (self::$connexion = @ssh2_sftp(self::$authent)) ? TRUE : FALSE;
  25. }
  26. private static function fileExist(string $_file = NULL)
  27. {
  28. return (file_exists($_file)) ? TRUE : FALSE;
  29. }
  30. private static function fileGetContents(string $_file = NULL)
  31. {
  32. return (self::$dataSend = @file_get_contents($_file)) ? TRUE : FALSE;
  33. }
  34. private static function accessHost(bool $_showAlert = TRUE)
  35. {
  36. if (!self::connectHost()) {
  37. ($_showAlert == TRUE) ? alert::recError("Erreur de connection au serveur distant") : NULL;
  38. return FALSE;
  39. }
  40. if (!self::authentHost()) {
  41. ($_showAlert == TRUE) ? alert::recError("Erreur d'authentification au serveur distant") : NULL;
  42. return FALSE;
  43. }
  44. if (!self::initializeHost()) {
  45. ($_showAlert == TRUE) ? alert::recError("Erreur d'initialisation au serveur distant") : NULL;
  46. return FALSE;
  47. }
  48. ($_showAlert == TRUE) ? alert::recSuccess("Accès au serveur distant") : NULL;
  49. return TRUE;
  50. }
  51. public static function testAccessHost()
  52. {
  53. return (self::accessHost(FALSE)) ? TRUE : FALSE;
  54. }
  55. private static function sendFile(string $_file)
  56. {
  57. self::accessHost();
  58. $stream = @fopen("ssh2.sftp://" . self::$authent . SFTP_REMOTE . $_file, "w");
  59. if ($stream == FALSE){
  60. alert::recError("Impossible d'écrire sur le serveur distant");
  61. return FALSE;
  62. }
  63. $data = @file_get_contents(SFTP_LOCAL . $_file);
  64. if ($data == FALSE){
  65. alert::recError("Impossible d'extraire les données du fichier local");
  66. return FALSE;
  67. }
  68. if (@fwrite($stream, $data) === false) {
  69. alert::recError($_file . " n'a pas pu être transféré au serveur distant");
  70. return FALSE;
  71. } else {
  72. alert::recSuccess($_file . " a été trasféré avec succès");
  73. return TRUE;
  74. }
  75. @fclose($stream);
  76. }
  77. public static function deleteFileToRemote(string $_file)
  78. {
  79. db::query("UPDATE " . DB_T_EXCEL . " SET createForSFTP = NULL WHERE id = :id");
  80. db::bind(':id', salaries::lastExcel());
  81. try {
  82. db::execute();
  83. alert::recSuccess($_file . " a été supprimé du serveur local.");
  84. return TRUE;
  85. } catch (Exception $e) {
  86. alert::recError($_file . " n'a pas pu être supprimé");
  87. return FALSE;
  88. }
  89. }
  90. public static function sendFileToRemote(string $_file = NULL)
  91. {
  92. if ($_file == NULL) {
  93. alert::recError("Le fichier à envoyé n'a pas été défini");
  94. return FALSE;
  95. } elseif (!self::fileExist(SFTP_LOCAL . $_file)) {
  96. alert::recError($_file . " n'est pas présent sur le serveur");
  97. return FALSE;
  98. } else {
  99. return self::sendFile($_file);
  100. }
  101. }
  102. public static function scanFolderRemote()
  103. {
  104. self::accessHost(FALSE);
  105. $realpath = @ssh2_sftp_realpath(self::$connexion, SFTP_REMOTE);
  106. $dir = "ssh2.sftp://" . self::$connexion . $realpath;
  107. $tempArray = array();
  108. if (is_dir($dir)) {
  109. if ($dh = opendir($dir)) {
  110. while (($file = readdir($dh)) !== false) {
  111. $tempFile = NULL;
  112. $realpath = @ssh2_sftp_realpath(self::$connexion, $file);
  113. $filetype = filetype($dir . $realpath);
  114. $size = sprintf("%.2f", filesize($dir . $realpath));
  115. if ($filetype != "dir") {
  116. $infos = @ssh2_sftp_stat(self::$connexion, $file);
  117. $tempFile["file"] = $file;
  118. $tempFile["size"] = core::formatFileSize($infos["size"], 2);
  119. $tempFile["date"] = core::dateFromTimestamp($infos["atime"]);
  120. $tempArray[] = $tempFile;
  121. }
  122. }
  123. closedir($dh);
  124. }
  125. }
  126. return $tempArray;
  127. }
  128. public static function scanFolderLocal()
  129. {
  130. $tempArray = array();
  131. if ($scandir = scandir(SFTP_LOCAL)) {
  132. foreach ($scandir as $file) {
  133. $tempFile = NULL;
  134. if (is_file(SFTP_LOCAL . $file) === TRUE and $file != "index.html") {
  135. $tempFile["file"] = $file;
  136. $tempFile["size"] = core::formatFileSize(filesize(SFTP_LOCAL . $file), 2);
  137. $tempFile["date"] = core::dateFromTimestamp(filemtime(SFTP_LOCAL . $file));
  138. $tempArray[] = $tempFile;
  139. }
  140. }
  141. }
  142. return $tempArray;
  143. }
  144. public static function deleteFormRemote(string $_file)
  145. {
  146. self::accessHost(FALSE);
  147. if (@ssh2_sftp_unlink(self::$connexion, SFTP_REMOTE . $_file)) {
  148. alert::recSuccess($_file . " a été supprimé du serveur distant.");
  149. return TRUE;
  150. } else {
  151. alert::recError($_file . " n'a pas été supprimé du serveur distant");
  152. return FALSE;
  153. }
  154. }
  155. public static function downloadFormRemote(string $_file)
  156. {
  157. self::accessHost(FALSE);
  158. //ssh2_scp_recv(self::$authent, SFTP_REMOTE.$_file, SFTP_LOCAL.$_file);
  159. $stream = @fopen("ssh2.sftp://" . self::$authent . SFTP_REMOTE . $_file, 'r');
  160. $contents = stream_get_contents($stream);
  161. file_put_contents(DIR_TEMP . $_file, $contents);
  162. @fclose($stream);
  163. }
  164. }