IPB

Добро пожаловать, гость ( Вход | Регистрация )

> Delphi, Asm, C, WinAPI, PHP, ..., FAQ
-=CHE@TER=-
Jan 5 2007, 00:35
Сообщение #1


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,355
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 311 раз(а)



Delphi programs in API.
На английском.
Очень подробно всё описано, плюс есть исходные коды готовых юнитов.
Например SmallUtil, в котором есть все частоиспользуемые подпрограммы, и который в размере меньше, чем SysUtils (автор так утверждает - я не проверял).
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
 
Reply to this topicStart new topic
Ответов
-=CHE@TER=-
Jul 27 2010, 17:38
Сообщение #2


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,355
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 311 раз(а)



Блин, ставил по работе на удалённый сайт Joomla - застрелиться. Сама CMS в архиве .tar.gz, но хостер (сюрприз!) не даёт доступ по SSH, а также запускать через PHP exec() / system() чтобы выполнить команду распаковки. В Интернете погуглил - ничего кроме использования двух упомянутых выше команд посоветовать не могут.
Короче, распаковал я Жумлу и стал копировать по FTP на сайт... 2 часа с гаком - un-freaking-believable!
Скорость заливки-то большая, да вот при создании нового файла удалённый сайт почему-то тупил по несколько секунд, а в Жумле этих файлов, как снега зимой.
В общем, в конце копирования я уже озверел и решил написать свою программу, которая бы соединяла файлы в один (один файл быстро заливается) и чтобы этот файл можно было потом на сервере распаковать вызвав через HTTP скрипт на PHP для распаковки.

Формат файла filedump:
DWORD - размер файла (size)
DWORD - размер строки имени файла (nlen)
CHARS - имя и путь файла (nlen байт)
BYTES - содержимое файл (size байт)
Повторить до конца файла.

Маленькое замечание: т.к. надо было ещё и пустые каталоги на всякий случий паковать и создавать на сервере, то с именем файла такое дело - если оно заканчивается на '/' - то это каталог, нужно его создать. Файлы при паковке сортируются, так что ситуации, когда надо распаковать файл, каталога для которого ещё нет, по идее, не должны встречаться.

Опционально в эти скрипты можно добавить сжатие gz (если хостер поддерживает) и дату со временем.

pack.php - пакует в архив filedump всё в текущем каталоге и его подкаталогах.
unpk.php - распаковывает filedump в текущий каталог.

Т.к. скрипты дописал практически одновременно с окончанием копирования - проверить времени не было, но, по идее, должны работать. Кстати, там с правами под иксы может быть косяк - все файлы будут пользователю Apache принадлежать - это можно поковырять и chmod() при распаковке добавить для файлов.

Код программ

pack.php
CODE

<?php
  set_time_limit(0);

Function GetFileList($dirpath){
  $dirs = array();
  if(is_dir($dirpath)){
    if($dh = opendir($dirpath)){
      while($file = @readdir($dh)){
        if(($file != '.') && ($file != '..')){
          if((filetype($dirpath.$file) == 'file')){
            $dirs[] = $dirpath.$file;
          }else{
            $dirs[] = $dirpath.$file.'/';
            $dirs = array_merge($dirs, GetFileList($dirpath.$file.'/'));
          }
        }
      }
      closedir($dh);
      natcasesort($dirs);
    }
  }
  return($dirs);
}

//  optional: add filedatetime and compression
//  $tm = filemtime($file); // getfiletime
//  touch($file, $tm);      // setfiletime
//  $file = gzcompress($file, 9);
//  $file = gzdecompress($file);

  @unlink('./filedump');
  $list = GetFileList('./');
  for($i = 0; $i < count($list); $i++){
//    echo $list[$i]."\r\n";
    $fl = fopen('./filedump', 'ab');
    if($fl){
      $name = substr($list[$i], 2);
      $nlen = strlen($name);
      $size = 0;
      $file = '';
      if($name[$nlen-1] != '/'){
        $size = filesize('./'.$name);
        $file = file_get_contents('./'.$name);
      }
      $size = pack('V', $size);
      $nlen = pack('V', $nlen);
      fwrite($fl, $size, 4);
      fwrite($fl, $nlen, 4);
      $size = unpack('V', $size);
      $nlen = unpack('V', $nlen);
      fwrite($fl, $name, $nlen[1]);
      fwrite($fl, $file, $size[1]);
    }
    fclose($fl);
  }

?>




unpk.php
CODE

<?php
  set_time_limit(0);
  $fend = filesize('./filedump');
  $fl = fopen('./filedump', 'rb');
  while(ftell($fl) < $fend){
    $size = 0;
    $nlen = 0;
    $name = '';
    $file = '';

    $size = fread($fl, 4);
    $nlen = fread($fl, 4);
    $size = unpack('V', $size);
    $nlen = unpack('V', $nlen);
    $size = $size[1];
    $nlen = $nlen[1];
    $name = fread($fl, $nlen);
    if($size != 0){
      $file = fread($fl, $size);
    }
    if($name[$nlen-1] == '/'){
      @mkdir('./'.$name, 0777);
    }else{
      @file_put_contents('./'.$name, $file);
    }
  }
  fclose($fl);
?>



Спасибо сказали:
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Сообщения в этой теме
-=CHE@TER=-   Delphi, Asm, C, WinAPI, PHP, ...   Jan 5 2007, 00:35
Siberian GRemlin   Может не в тему, но не решился создавать новую тем...   Jul 5 2007, 16:36
-=CHE@TER=-   Может не в тему, но не решился создавать новую тем...   Jul 5 2007, 16:44
-=CHE@TER=-   Вопрос - кто знает, как по MUTEX'у процесса по...   Jul 7 2007, 16:37
jTommy   Вопрос - кто знает, как по MUTEX'у процесса по...   Jul 8 2007, 16:01
-=CHE@TER=-   Если я правильно понял ситуация такая: загружена т...   Jul 9 2007, 12:10
jTommy   Нет, всё гораздо хуже - программа при загрузке ком...   Jul 9 2007, 20:09
-=CHE@TER=-   Нет, всё гораздо хуже - программа при загрузке ком...   Aug 22 2014, 11:14
Xplorer   Handle'у процесса посылал WM_CLOSE - без толку...   Jul 10 2007, 09:44
-=CHE@TER=-   Бардак на корабле! © Попугай из Пиратов Карибс...   Jul 10 2007, 12:51
Xplorer   Я изменил код. А вот, кстати, интересный тогда вп...   Jul 10 2007, 13:54
-=CHE@TER=-   Я изменил код. Смотри в коде.Хе-хе, ты своё сообщ...   Jul 10 2007, 22:04
-=CHE@TER=-   Думаю, тут будет полезно приводить некоторые полез...   Jul 16 2007, 16:40
Siberian GRemlin   Извиняюсь, если не в тему (вроде это WinAPI). Хоте...   Jul 19 2007, 09:14
-=CHE@TER=-   Извиняюсь, если не в тему (вроде это WinAP). Хотел...   Jul 19 2007, 13:51
-=CHE@TER=-   А теперь моя очередь задавать вопрос. (*улыбается*...   Jul 20 2007, 01:30
Xplorer   Для 2000/XP/2003/Vista - RasGetConnectionStatistic...   Jul 20 2007, 06:08
-=CHE@TER=-   Xplorer! RasGetConnectionStatistics - это как ...   Jul 20 2007, 13:48
-=CHE@TER=-   [b]Xplorer! RasGetConnectionStatistics - это к...   Jul 21 2010, 16:00
-=CHE@TER=-   Переименовал тему - теперь тут можете обсуждать чт...   Jul 23 2007, 19:01
-=CHE@TER=-   Кстати, насчёт ReadKey / KeyPressed - вот, неплоха...   Aug 11 2007, 13:54
-=CHE@TER=-   Вопрос ко всем - возможно ли при помощи класса TFi...   Apr 7 2008, 17:03
Xplorer   S := TFileStream.Create('x.x', fmO...   Apr 8 2008, 19:30
-=CHE@TER=-   Xplorer! Ой, спасибо большое! Что-то я сто...   Apr 9 2008, 10:09
-=CHE@TER=-   Ещё пара глупых вопросов: 1. В Си можно сделать т...   Jun 8 2008, 11:49
Grom PE   -=CHE@TER=-, вопросы нормальные =) 1. Если я прав...   Jun 8 2008, 12:28
-=CHE@TER=-   Grom PE! Спасибо большое, только создавать ещё...   Jun 8 2008, 17:59
-=CHE@TER=-   Небольшая программка для перезапуска зависших прил...   Oct 12 2008, 19:56
-=CHE@TER=-   Вопрос: кто-нибудь знает как получить ключи команд...   Oct 13 2008, 08:16
-=CHE@TER=-   Вот код тру перезапускалки: Program WHungApp; Us...   Oct 13 2008, 10:55
-=CHE@TER=-   PHP 5.2.1 + IIS 6 PHP has encountered an Access V...   Oct 18 2008, 11:15
-=CHE@TER=-   Очередная херня - столько времени убил, пока нагуг...   Oct 31 2008, 15:54
-=CHE@TER=-   Есть на форме UpDown1, ассоциированный (Associate)...   Nov 15 2008, 07:32
Grom PE   -=CHE@TER=-, у меня с чистым созданным проектом вс...   Nov 15 2008, 12:58
-=CHE@TER=-   Еще попробуй перезапустить Delphi.Как оно всё оказ...   Nov 15 2008, 13:08
-=CHE@TER=-   Вопрос сложный, но может кто-то знает в чём прикол...   Dec 18 2008, 18:26
-=CHE@TER=-   Делал тут как-то плеер. И решил сделать для него в...   Jan 2 2009, 19:53
-=CHE@TER=-   Кто-нибудь знает, как можно проверить сокет на дох...   Jun 25 2009, 04:10
-=CHE@TER=-   Однако! Первая строчка с получением 0 байт у м...   Dec 5 2009, 16:36
Siberian GRemlin   Обычно указывается драйвер вызвавший эту ошибку. Е...   Jun 25 2009, 06:22
-=CHE@TER=-   Обычно указывается драйвер вызвавший эту ошибку. Е...   Jun 25 2009, 11:56
Siberian GRemlin   Полезную статейку нашёл. Даже если ошибка на чужом...   Nov 2 2009, 10:11
-=CHE@TER=-   Товарищи, объясните мне кто-нибудь такой феномен: ...   Jan 15 2010, 19:26
Grom PE   -=CHE@TER=- Ну дык, процессор так работает, x shr...   Jan 16 2010, 07:46
-=CHE@TER=-   Думаю, что это лучше здесь разместить, чем в ссылк...   Jan 23 2010, 18:35
Siberian GRemlin   Может не в тему, но есть ли готовый модуль\би...   Feb 15 2010, 15:45
Axsis   пара ссылок с первой страницы гугла: http://www.de...   Feb 15 2010, 16:10
-=CHE@TER=-   Чтобы долго не писать чего да как - приведу [/cut]...   Apr 22 2010, 10:05
-=CHE@TER=-   Иногда бывает надо при распаковке игровых архивов ...   Jun 1 2010, 17:46
-=CHE@TER=-   Блин, ставил по работе на удалённый сайт Joomla - ...   Jul 27 2010, 17:38
-=CHE@TER=-   Вчерась ковырял одну игрушку, где данные были упак...   Aug 10 2010, 14:27
-=CHE@TER=-   Вчерась ковырял одну игрушку, где данные были упак...   Mar 7 2012, 20:37
Siberian GRemlin   Сегодня у меня был очередной сеанс мозгофилии. При...   Jan 7 2011, 15:20
-=CHE@TER=-   1) Либо Inno: AnsiString -> WideString; Delphi:...   Jan 7 2011, 23:20
Siberian GRemlin   Собственно, я и спрашивал как правильно перегнать ...   Jan 8 2011, 10:49
-=CHE@TER=-   Locale - это, грубо так говоря, язык установленный...   Jan 8 2011, 12:35
-=CHE@TER=-   Ковырял тут по просьбе CMS одну. Собственно, были ...   Jan 9 2011, 16:01
Siberian GRemlin   Не подскажите ка можно на JavaScript вставить (гип...   Apr 14 2011, 16:49
-=CHE@TER=-   Если тебе просто что-то надо вставить, а не файл, ...   Apr 14 2011, 18:26
Siberian GRemlin   Мне нужно было именно на JS или jQ, ибо для AJAX н...   Apr 15 2011, 11:12
-=CHE@TER=-   Поставил я тут новый colorer для FAR и моя тачка з...   Jul 23 2011, 13:01
Siberian GRemlin   Намедни столкнулся с тем что IE не понимает InnerH...   Jul 28 2011, 03:05
-=CHE@TER=-   У Delphi такой смешной оптимизатор (компилирую про...   Nov 11 2011, 15:15
-=CHE@TER=-   Siberian GRemlin! До меня, кажется, дошло, по...   Nov 14 2011, 13:41
-=CHE@TER=-   У Delphi такой смешной оптимизатор (компилирую про...   Mar 12 2012, 09:13
Siberian GRemlin   для каждой строки писать String[кол-во_символов] =...   Mar 12 2012, 11:07
Siberian GRemlin   Как я понимаю при конкатенации (дурацкое слово) ст...   Nov 11 2011, 15:25
-=CHE@TER=-   Похоже долго ты на Java писал. (*улыбается*) Нет,...   Nov 11 2011, 20:39
-=CHE@TER=-   Писал я недавно патч для включения крови в German ...   Jan 14 2012, 13:26
Siberian GRemlin   Кто-нибудь знает где можно взять готовый код под P...   Mar 24 2012, 09:13
-=CHE@TER=-   Вот тут (за номером 7 самый простой, и ниже - до к...   Mar 24 2012, 11:58
-=CHE@TER=-   В Си есть такая замечательная функция, как sprintf...   Apr 14 2012, 15:39
-=CHE@TER=-   И ещё о нескольких устаревших (по мнению MSDN, где...   Apr 15 2012, 10:32
-=CHE@TER=-   Проводя очередную чистку системы, натолкнулся на ф...   Apr 19 2012, 13:23
Grom PE   Сам у себя встречал такие файлы. Полюбопытствовал,...   Apr 19 2012, 19:05
-=CHE@TER=-   В очередной раз зайдя на сайт товарища Siberian GR...   Apr 24 2012, 12:14
Siberian GRemlin   Я так понимаю, ты знаешь способ создания динамичны...   Apr 24 2012, 13:16
-=CHE@TER=-   Я так понимаю, ты знаешь способ создания динамичны...   Apr 24 2012, 15:37
Siberian GRemlin   Месяц назад я только договорился с админом и мне в...   Apr 24 2012, 15:49
-=CHE@TER=-   О, блин, 4-ый PHP это уже здорово, чем вообще ниче...   Apr 24 2012, 16:19
-=CHE@TER=-   Нашёл в Delphi 7 охрененный косяк, который вынес м...   May 30 2012, 10:22
-=CHE@TER=-   Все, наверное, помнят, что в .BMP формате строки и...   Sep 6 2012, 20:32
jTommy   Ради интереса полез в свою "библию" - кн...   Sep 8 2012, 20:52
-=CHE@TER=-   Ты имеешь ввиду GFF? Я нашёл там вот такое описани...   Sep 9 2012, 12:43
jTommy   Да, она самая, издание от 1997 года.   Sep 9 2012, 21:25
-=CHE@TER=-   Поделюсь двумя вещами. 1) Во-первых, в Delphi 7 к...   Dec 15 2012, 09:29
-=CHE@TER=-   Товарищи, у меня вопрос - может кто-нибудь помочь?...   Apr 6 2013, 18:25
-=CHE@TER=-   Нашёл вот такую штуку: Это из исходных кодов ста...   Apr 9 2013, 16:17
-=CHE@TER=-   Исходные коды можно нагуглить, могу выложить, если...   Apr 18 2013, 16:48
-=CHE@TER=-   Я, походу, перестану скоро Delphi пользоваться, во...   Apr 27 2013, 15:06
Siberian GRemlin   Моя прога по работе использует TTimer и пока пробл...   Apr 29 2013, 13:48
-=CHE@TER=-   P. S. С получением текста помочь не могу, к сожале...   Apr 30 2013, 11:40
-=CHE@TER=-   Ну, ладно, пока никто с получением текста не помог...   May 1 2013, 11:54
-=CHE@TER=-   Сделал себе замечательный srvrun.bat для перезапус...   Jun 6 2013, 17:11
Siberian GRemlin   Возникла внезапная потребность использовать socks ...   Jun 22 2013, 08:06
-=CHE@TER=-   Мне не так давно было ещё одно откровение, которым...   Jun 28 2013, 11:09
-=CHE@TER=-   Часто пишу программы, которые со временем довольно...   Sep 14 2013, 14:32
-=CHE@TER=-   Пишу в последнее время на Си, так что недавно мне ...   Nov 23 2013, 17:38
-=CHE@TER=-   Недавно я тут писал про утилиту COMPRESS.EXE, сжим...   Nov 27 2013, 15:42
-=CHE@TER=-   Натолкнулся на то, что в нескольких играх использу...   Feb 13 2014, 14:49
2 Страниц V  1 2 >


Reply to this topicStart new topic
14 чел. читают эту тему (гостей: 14, скрытых пользователей: 0)
Пользователей: 0 -

 



Упрощённая версия Сейчас: 27th May 2024 - 10:17