Posted By

ramirog89 on 07/16/15


Tagged

rules no for nobody


Versions (?)

almost done


 / Published in: PHP
 

b.php urgetwhatuneed whereyouwannago

  1. <?php
  2.  
  3. define('DUMP_DIR', __DIR__);
  4.  
  5. function time_elapsed($secs){
  6. $bit = array(
  7. ' hora' => $secs / 3600 % 24,
  8. ' minuto' => $secs / 60 % 60,
  9. ' segundo' => $secs % 60
  10. );
  11.  
  12. foreach($bit as $k => $v){
  13. if($v > 1)$ret[] = $v . $k . 's';
  14. if($v == 1)$ret[] = $v . $k;
  15. }
  16. array_splice($ret, count($ret)-1, 0, 'y');
  17.  
  18. return join(' ', $ret);
  19. }
  20.  
  21. function human_filesize($bytes, $decimals = 2) {
  22. $sz = 'BKMGTP';
  23. $factor = floor((strlen($bytes) - 1) / 3);
  24. return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$sz[$factor];
  25. }
  26.  
  27. function dumpHref($url, $isRoot = false) {
  28. global $absPath;
  29.  
  30. $churl = $absPath;
  31. if (!$isRoot)
  32. $churl .= $url;
  33.  
  34. $ch = curl_init();
  35. curl_setopt($ch, CURLOPT_URL, $churl);
  36. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  37. $contenido = curl_exec($ch);
  38. curl_close($ch);
  39.  
  40. return $contenido;
  41. }
  42.  
  43. function savefile
  44. (
  45. $enlace,
  46. $isRoot = false
  47. )
  48. {
  49. global $dir, $downloadedFiles;
  50.  
  51. $contenido = dumpHref($enlace, $isRoot);
  52.  
  53. $path = "";
  54. $name = "root.html";
  55. $skip = false;
  56.  
  57. if (!$isRoot) {
  58. $absolutePath = explode("/", $enlace);
  59.  
  60. $name = array_pop($absolutePath);
  61. $name = explode("?", $name);
  62. $name = $name[0];
  63.  
  64. $implode = implode("/", $absolutePath)
  65. . "/";
  66.  
  67. $path .= $implode;
  68.  
  69. if (substr($path, 0, 4) != 'http') {
  70. $directory = $dir . $path;
  71. if (!is_dir($directory) && !mkdir($directory, 0777, true))
  72. die('Error al crear la carpeta contenedora del archivo <strong>' . $name . '</strong>');
  73. } else {
  74. $skip = true;
  75. }
  76. }
  77.  
  78. $path .= $name;
  79.  
  80. if (!$skip) {
  81. $fp = $dir . $path;
  82. $file = fopen($fp, 'w') or die('no pude abrir el file');
  83. fwrite($file, $contenido);
  84. fclose($file);
  85.  
  86. echo PHP_EOL
  87. . $path
  88. . " archivo bajado correctamente. total : "
  89. . human_filesize(filesize($fp))
  90. . PHP_EOL;
  91.  
  92. array_push($downloadedFiles, $file);
  93. } else {
  94. echo PHP_EOL . $path . " fue skipeado." . PHP_EOL;
  95. }
  96.  
  97. return $path;
  98. }
  99.  
  100.  
  101. /**
  102.  * @TODO: Abria que terminar la regex para que
  103.  * tenga el OR... (href|src) y usar solo una regex
  104.  */
  105. function craw
  106. (
  107. $file,
  108. $parentFolder = false,
  109. $currentFolder = null
  110. )
  111. {
  112. global $dir, $absPath;
  113.  
  114. $allowedFilesToDump = array(
  115. 'css', 'js',
  116. 'jpg', 'jpeg', 'bmp', 'png', 'ico'
  117. );
  118.  
  119. foreach ($file as $index => $linea) {
  120. if (!$parentFolder) {
  121.  
  122. // regex original para "a href" : <a\s+href=["\']([^"\']+)["\']/i
  123. if (preg_match('/(href|src)=["\']([^"\']+)["\']/i', $linea, $enlace)) {
  124.  
  125. $extension = explode('.', $enlace[2]);
  126. $extension = strtolower(end($extension));
  127.  
  128. if (in_array($extension, $allowedFilesToDump)) {
  129. $cssfile = savefile($enlace[2], false, $absPath);
  130.  
  131. if ($extension == "css") {
  132.  
  133. $cssfolder = explode('/', $cssfile);
  134. array_pop($cssfolder);
  135. $cssfolder = implode('/', $cssfolder);
  136. $cssFileFolder = $dir . $cssfile;
  137.  
  138.  
  139. $filecss = file($cssFileFolder);
  140. craw($filecss, true, $cssfolder); // crawleo el css
  141. }
  142. }
  143.  
  144. }
  145.  
  146. } else {
  147.  
  148. /** @TODO: hacer bien las regex papa.. **/
  149. if (preg_match('/(background:|src:|import) url\(["\']([^"\']+)["\']\)/i', $linea, $enlace)) {
  150.  
  151. $extension = explode('.', $enlace[2]);
  152. $extension = strtolower(end($extension));
  153.  
  154. if (substr($enlace[2], 0, 2) != '..') {
  155. $h = 'css/' . $enlace[2];
  156. } else {
  157.  
  158. $h = $currentFolder . '/' . $enlace[2];
  159.  
  160. }
  161.  
  162. $othercssfiletocraw = savefile($h, false, $absPath);
  163.  
  164. if ($extension == 'css') {
  165. $cssfolder = explode('/', $othercssfiletocraw);
  166. array_pop($cssfolder);
  167. $cssfolder = implode('/', $cssfolder);
  168. $cssFileFolder = $dir . $othercssfiletocraw;
  169.  
  170. $filetocraw = file($cssFileFolder);
  171.  
  172. craw($filetocraw, true, $cssfolder); // crawleo el css
  173. }
  174.  
  175. }
  176.  
  177. // Esto es maso meno pa las fonts <??\>
  178. if (preg_match('/, url\(["\']([^"\']+)["\']\)/i', $linea, $enlace)) {
  179.  
  180. $partes = explode(',', $linea);
  181.  
  182. foreach ($partes as $parte) {
  183. $f = checkForUri($parte);
  184.  
  185. if (strpos($f, '..')) {
  186. $h = str_replace('..', '', $f);
  187. } else {
  188. $h = $f;
  189. }
  190.  
  191. $h = $currentFolder . '/' . $h;
  192.  
  193. savefile($h, false, $absPath);
  194. }
  195.  
  196.  
  197. }
  198.  
  199. }
  200. }
  201.  
  202. }
  203.  
  204. function checkForUri($line) {
  205. if (preg_match('/url\(["\']([^"\']+)["\']\)/i', $line, $uri)) {
  206. return $uri[1];
  207. }
  208. return false;
  209. }
  210.  
  211. // validar la url con una regex vite
  212. if (!isset($argv[1]))
  213. die('Debe ingresar una url válida para crawlear.');
  214.  
  215. // validar la url con una regex vite
  216. if (!isset($argv[2]))
  217. die('Debe ingresar un nombre de carpeta donde dumpear.');
  218.  
  219. $dir = DUMP_DIR
  220. . DIRECTORY_SEPARATOR
  221. . $argv[2]
  222. . DIRECTORY_SEPARATOR;
  223. $dir = str_replace('\\', '/', $dir);
  224.  
  225. if (!is_dir($dir) && !mkdir($dir, 0777))
  226. die('Error al crear la carpeta.');
  227.  
  228. $downloadedFiles = array();
  229.  
  230.  
  231. echo "//===============================//" . PHP_EOL;
  232. echo "** COMENZANDO DESCARGA ** " . PHP_EOL;
  233. echo "//===============================//" . PHP_EOL;
  234.  
  235.  
  236. $absPath = $argv[1];
  237. $a = explode('/', $absPath);
  238. $end = end($a);
  239. if (strpos($end, '.')) {
  240. $rootFile = array_pop($a);
  241. $absPath = implode("/", $a) . '/';
  242. }
  243.  
  244. // Setting global variables
  245. global $dir, $downloadedFiles, $absPath; // set DumpDir as global
  246.  
  247. $start = time();
  248.  
  249. $root = savefile($absPath, true);
  250. $rootPath = $dir . $root;
  251. if (file_exists($rootPath)) {
  252. $snap = file($rootPath);
  253. craw($snap);
  254. }
  255.  
  256. $end = time();
  257.  
  258. echo PHP_EOL . "Tiempo transcurrido : " . time_elapsed($end - $start) . PHP_EOL;
  259. echo PHP_EOL . "Total archivos bajados : " . count($downloadedFiles) . PHP_EOL;
  260.  
  261. // falta que genere un README con los archivos bajados... ñaca ñaca
  262. ?>

Report this snippet  

You need to login to post a comment.