sftp.class.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  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. /*
  59. $stream = @fopen("ssh2.sftp://" . self::$authent . SFTP_REMOTE . $_file, "w");
  60. if ($stream == FALSE){
  61. alert::recError("Impossible d'écrire sur le serveur distant");
  62. return FALSE;
  63. }
  64. */
  65. try {
  66. $stream = fopen("ssh2.sftp://" . self::$authent . SFTP_REMOTE . $_file, "w");
  67. } catch (Exception $e) {
  68. error_log("Caught $e");
  69. alert::recError("Impossible d'écrire sur le serveur distant");
  70. alert::recError("Caught " . $e);
  71. return FALSE;
  72. }
  73. /*
  74. $data = @file_get_contents(SFTP_LOCAL . $_file);
  75. if ($data == FALSE){
  76. alert::recError("Impossible d'extraire les données du fichier local");
  77. return FALSE;
  78. }
  79. */
  80. try {
  81. $data = file_get_contents(SFTP_LOCAL . $_file);
  82. } catch (Exception $e) {
  83. error_log("Caught " . $e);
  84. alert::recError("Impossible d'extraire les données du fichier local");
  85. alert::recError("Caught $e");
  86. return FALSE;
  87. }
  88. /*
  89. $data = @file_get_contents(SFTP_LOCAL . $_file);
  90. if ($data == FALSE){
  91. alert::recError("Impossible d'extraire les données du fichier local");
  92. return FALSE;
  93. }
  94. */
  95. try {
  96. $data = file_get_contents(SFTP_LOCAL . $_file);
  97. } catch (Exception $e) {
  98. error_log("Caught " . $e);
  99. alert::recError("Impossible d'extraire les données du fichier local");
  100. alert::recError("Caught $e");
  101. return FALSE;
  102. }
  103. if (@fwrite($stream, $data) === false) {
  104. alert::recError($_file . " n'a pas pu être transféré au serveur distant");
  105. return FALSE;
  106. } else {
  107. alert::recSuccess($_file . " a été trasféré avec succès");
  108. return TRUE;
  109. }
  110. @fclose($stream);
  111. }
  112. public static function deleteFileToRemote(string $_file)
  113. {
  114. db::query("UPDATE " . DB_T_EXCEL . " SET createForSFTP = NULL WHERE id = :id");
  115. db::bind(':id', salaries::lastExcel());
  116. try {
  117. db::execute();
  118. alert::recSuccess($_file . " a été supprimé du serveur local.");
  119. return TRUE;
  120. } catch (Exception $e) {
  121. alert::recError($_file . " n'a pas pu être supprimé");
  122. return FALSE;
  123. }
  124. }
  125. public static function sendFileToRemote(string $_file = NULL)
  126. {
  127. if ($_file == NULL) {
  128. alert::recError("Le fichier à envoyé n'a pas été défini");
  129. return FALSE;
  130. } elseif (!self::fileExist(SFTP_LOCAL . $_file)) {
  131. alert::recError($_file . " n'est pas présent sur le serveur");
  132. return FALSE;
  133. } else {
  134. return self::sendFile($_file);
  135. }
  136. }
  137. public static function scanFolderRemote()
  138. {
  139. self::accessHost(FALSE);
  140. $realpath = @ssh2_sftp_realpath(self::$connexion, SFTP_REMOTE);
  141. $dir = "ssh2.sftp://" . self::$connexion . $realpath;
  142. $tempArray = array();
  143. if (is_dir($dir)) {
  144. if ($dh = opendir($dir)) {
  145. while (($file = readdir($dh)) !== false) {
  146. $tempFile = NULL;
  147. $realpath = @ssh2_sftp_realpath(self::$connexion, $file);
  148. $filetype = filetype($dir . $realpath);
  149. $size = sprintf("%.2f", filesize($dir . $realpath));
  150. if ($filetype != "dir") {
  151. $infos = @ssh2_sftp_stat(self::$connexion, $file);
  152. $tempFile["file"] = $file;
  153. $tempFile["size"] = core::formatFileSize($infos["size"], 2);
  154. $tempFile["date"] = core::dateFromTimestamp($infos["atime"]);
  155. $tempArray[] = $tempFile;
  156. }
  157. }
  158. closedir($dh);
  159. }
  160. }
  161. return $tempArray;
  162. }
  163. public static function scanFolderLocal()
  164. {
  165. $tempArray = array();
  166. if ($scandir = scandir(SFTP_LOCAL)) {
  167. foreach ($scandir as $file) {
  168. $tempFile = NULL;
  169. if (is_file(SFTP_LOCAL . $file) === TRUE and $file != "index.html") {
  170. $tempFile["file"] = $file;
  171. $tempFile["size"] = core::formatFileSize(filesize(SFTP_LOCAL . $file), 2);
  172. $tempFile["date"] = core::dateFromTimestamp(filemtime(SFTP_LOCAL . $file));
  173. $tempArray[] = $tempFile;
  174. }
  175. }
  176. }
  177. return $tempArray;
  178. }
  179. public static function deleteFormRemote(string $_file)
  180. {
  181. self::accessHost(FALSE);
  182. if (@ssh2_sftp_unlink(self::$connexion, SFTP_REMOTE . $_file)) {
  183. alert::recSuccess($_file . " a été supprimé du serveur distant.");
  184. return TRUE;
  185. } else {
  186. alert::recError($_file . " n'a pas été supprimé du serveur distant");
  187. return FALSE;
  188. }
  189. }
  190. public static function downloadFormRemote(string $_file)
  191. {
  192. self::accessHost(FALSE);
  193. //ssh2_scp_recv(self::$authent, SFTP_REMOTE.$_file, SFTP_LOCAL.$_file);
  194. $stream = @fopen("ssh2.sftp://" . self::$authent . SFTP_REMOTE . $_file, 'r');
  195. $contents = stream_get_contents($stream);
  196. file_put_contents(DIR_TEMP . $_file, $contents);
  197. @fclose($stream);
  198. }
  199. }