PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (6): « 1 [2] 3 4 5 6 »

> Найдено сообщений: 77
leshiy_SV Отправлено: 17 Февраля, 2010 - 10:32:18 • Тема: Создать архив и удалить исходную папку • Форум: Программирование на PHP

Ответов: 15
Просмотров: 2395
А как проверить?
Если убрать архивирование и просто оставить пустую папку и написать

это она удаляется. Это что нибудь говорит или нет
leshiy_SV Отправлено: 17 Февраля, 2010 - 09:53:28 • Тема: Создать архив и удалить исходную папку • Форум: Программирование на PHP

Ответов: 15
Просмотров: 2395
Champion пишет:
ошибся в имени (или в пути) - знаешь как исправить
не должно, потому как если архивировать пустую папку, то она потом сразу удаляется.
Champion пишет:
доступ запрещен - скрипт может использовать эту папку. Возможно она открыта opendir и не закрыта closedir.
вроде нет. это папка вообще никак не связана со скриптом. И опять таки пустая папка архивируется и тут же удаляется. значит есть доступ.
Champion пишет:
У тебя многопоточная архитектура? Один поток архивирует, второй удаляет? Если нет, то твое предположение не верно.
А как с этим быть?
leshiy_SV Отправлено: 17 Февраля, 2010 - 09:26:48 • Тема: Создать архив и удалить исходную папку • Форум: Программирование на PHP

Ответов: 15
Просмотров: 2395
Доброго дня. делают так. Создаю архив с помощью библиотеки PCLZip, при этом при добавлении файла в архив, сам файл удаляется с помощью функции myPostAddCallBack А затем удаляю эту папку. Так вот архив создается и файлы исходные все удаляются, а вот потом сама папка, хоть и пустая, не удаляется. Хотя если просто так ее потом удалить с помощью php получается.
Видимо удаление начинается до полного создания архива. Как сделать чтобы удаление начиналось после того как полностью завершаться работы с архивом.
PHP:
скопировать код в буфер обмена
  1. function myPostAddCallBack($p_event, &$p_header){
  2. IF ($p_header['status'] == 'ok')  // ----- проверяем удачное добавление
  3.    unlink($p_header['filename']); // ----- удаляем файлы
  4. }
  5.  
  6. $archive = new PclZip($path.$archiveName);
  7. $unarc=($fileList=$archive->create($path.$folder,
  8.                 PCLZIP_OPT_REMOVE_PATH,$path,
  9.                 PCLZIP_CB_POST_ADD, myPostAddCallBack));
  10.  
  11. IF(file_exists($path.$archiveName)) rmdir($path.$folder); //-- если архив создан удаляем папку
  12.  
leshiy_SV Отправлено: 15 Февраля, 2010 - 12:32:07 • Тема: создание директорий • Форум: Программирование на PHP

Ответов: 14
Просмотров: 1210
Ха-ха Спасибо
leshiy_SV Отправлено: 15 Февраля, 2010 - 08:51:25 • Тема: создание директорий • Форум: Программирование на PHP

Ответов: 14
Просмотров: 1210
Однако а можно на каком нибудь примере это показать?

Если я правильно понял то вроде бы так:
PHP:
скопировать код в буфер обмена
  1. $path="www/archiv/razdel/";
  2. $folder="folder";
  3. IF(file_exists($path.$folder)){
  4.   IF ($handle = opendir($path)) {
  5.      while (false !== ($file = readdir($handle))) {
  6.        IF(preg_match("/".$folder."_(\d*)$/is",$file, $found))
  7.            IF($found[1]>$f) $f=$found[1];
  8.      }
  9.       echo "MAX: $f";
  10.       closedir($handle);
  11.   }
  12. }
leshiy_SV Отправлено: 13 Февраля, 2010 - 13:59:15 • Тема: создание директорий • Форум: Программирование на PHP

Ответов: 14
Просмотров: 1210
Единственное что в реале у меня $folder имеет на конце слэш "/"? т.е. например folder/. и как от него избавиться, самым простым способом, чтобы прибавить потом к нему "_$f" я не знаю. подскажите как тут решить проблему?
думаю использовать функцию как раз выдает имя без слэша
(Добавление)
JustUserR пишет:
оптимальнее взять список папок например ls -la и grep-ом из него на основе регулярного выражения выдернуть папку с самым большим номером
А можно об этом по подробнее. потому как столкнулся с проблемой, в том что если одну или несколько из папок удалить( теб которые в середине списка), то тут проявляются косяки. Получается что общее количество папок меньше чем номер последней папки. и тогда создающаяся папка уже существует Не понял
(Добавление)
или сделать так
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. IF(file_exists($path)){
  4.    $path="www/archiv/razdel/";
  5.    $folder="folder";
  6.      IF(file_exists($path.$folder))  {
  7.         $folders=glob("$path.$folder*", GLOB_ONLYDIR);
  8.         natsort($folders);   // сортируем массив, используя алгоритм "natural order"
  9.         $f=substr(array_pop($folders),7) + 1;
  10.         mkdir($path.$folder."_".$f);
  11.      }
  12.     ELSE mkdir($path.$folder);
  13. }
  14.  

Как такой вариант? что знающие люди скажут
leshiy_SV Отправлено: 13 Февраля, 2010 - 13:48:57 • Тема: создание директорий • Форум: Программирование на PHP

Ответов: 14
Просмотров: 1210
А что можно сказать про мой вариант постом выше?
leshiy_SV Отправлено: 13 Февраля, 2010 - 11:37:21 • Тема: Помогите написать регулярку • Форум: Регулярные выражения

Ответов: 43
Просмотров: 3025
isle пишет:
П.С. "Под ред. !Иванова [С].В." - квадратные (возможно, круглые тоже) скобки могут присутствовать или это опечатка?
это опечатка их вообще не должно быть. просто в начале я хотел, выделить первую букву фамилии квадратными скобками (просто экспериментировал). а потом решил что проще указать просто каким нибудь символом саму фамилию, а потом просто убрать его
leshiy_SV Отправлено: 13 Февраля, 2010 - 09:39:34 • Тема: создание директорий • Форум: Программирование на PHP

Ответов: 14
Просмотров: 1210
Я воспользовался советом Мелкого
Мелкий пишет:
Вот тут хорошая реализация была:
http://forum.php.su/topic.php?fo...27007#1263027007

А именно из этого поста. По-моему наиболее простая реализация.
Вот что получилось.
PHP:
скопировать код в буфер обмена
  1.  
  2. IF(file_exists($path)){
  3.    $path="www/archiv/razdel/";
  4.    $folder="folder";
  5.  
  6.    IF(file_exists($path.$folder))  {
  7.       $f=count(glob("$path.$folder*", GLOB_ONLYDIR));
  8.       mkdir($path.$folder."_".$f);
  9.    }
  10.    ELSE mkdir($path.$folder);
  11. }
  12.  
leshiy_SV Отправлено: 13 Февраля, 2010 - 09:22:13 • Тема: Помогите написать регулярку • Форум: Регулярные выражения

Ответов: 43
Просмотров: 3025
isle пишет:
Не понятно, зачем вам велосипед с 4-мя колесами? Улыбка Выше есть пример в 2 строчки.
потому что одним выражением не отделаешься, тут может быть несколько вариантов и все их нет возможности учесть. к тому же если авторы будут зарубежные, а там как кажется у них вначале идет имя а потом фамилия. И как это тогда учесть? Да так же и в русских, если кто то напишет вначале имя и отчество а потом фамилию, причем полностью как тогда быть?
Поэтому я не нашел другого никакого способа, кроме как напрямую указывать фамилию знаком !. если есть другие способы я с удовольствием попробую, но пока ничего подходящего не нашлось
isle пишет:
А вообще регулярка неправильная. В данном случае можно написать так (если проблемы с кирилицей:
почему неправильно? она хотя бы выводит правильный результат. А ваша
isle пишет:

$match = '|[^\s]*\s[^\.\s]*\.\s([.*?]{2}).*?|si';
preg_match($match,$str,$found);
$result = $found[1];
echo $result;
что то у меня ничего не выводит, массив $found пустой Однако
leshiy_SV Отправлено: 12 Февраля, 2010 - 14:50:26 • Тема: Помогите написать регулярку • Форум: Регулярные выражения

Ответов: 43
Просмотров: 3025
решил сделать так, чтобы получить нужную букву перед ней ставить знак !.
посмотрите на регулярку правильно ли написано
PHP:
скопировать код в буфер обмена
  1.  
  2. $str="Под ред. !Иванова С.В.";
  3. $result = preg_match("/!(.?)/",$str,$found);
  4.  

в итоге выдает массив Array ( [0] => !И [1] => И ).
leshiy_SV Отправлено: 12 Февраля, 2010 - 11:24:15 • Тема: создание директорий • Форум: Программирование на PHP

Ответов: 14
Просмотров: 1210
вот хочу написать кусочек для автоматического создания директорий (folder) в заданной директории (www/archiv/razdel). с учетом того, что если название, создающейся директории уже существует, к нему прибавлялась приставка _1, _2, и т.д. (folder_1, folder_2 ...) делаю так
PHP:
скопировать код в буфер обмена
  1.  
  2. $path="www/archiv/razdel/folder/";
  3. IF(file_exists($path)) {
  4.    $i=1;
  5. do{$path = ereg_replace("/$", "_$i", $path);
  6.      $i++;}
  7.    while(file_exists($path));
  8. }
  9. mkdir($path);
  10. echo "новая: ".$path;

выдает предупреждение:Deprecated: Function ereg_replace() is deprecated in index.php хотя и выводит правильный результат на первом этапе (folder_1), а потом бесконечно перебирает
и такой вопрос: правильно ли так делать или может так, считать в массив названия всех папок директории razdel, проверить в массиве директорию folder ну и если надо то уже прибавлять приставку. правда как считать названия только директории, а не файлов,с этим загвоздка.
leshiy_SV Отправлено: 05 Февраля, 2010 - 14:21:44 • Тема: регулярка • Форум: Регулярные выражения

Ответов: 3
Просмотров: 396
Проверте, плиз, правильна ли регулярка
должна заменять все наклонные слеши \ на один такой прямой /. например
на
так вроде работает Радость
leshiy_SV Отправлено: 04 Февраля, 2010 - 12:51:45 • Тема: Алфавитный указатель • Форум: Программирование на PHP

Ответов: 10
Просмотров: 514
ну не знаю Хм , просто так мне легче, да и писать код меньше нужно
leshiy_SV Отправлено: 04 Февраля, 2010 - 09:58:23 • Тема: Алфавитный указатель • Форум: Программирование на PHP

Ответов: 10
Просмотров: 514
а можно использовать такую конструкцию ссылки или лучше сделать транслит русских букв
PHP:
скопировать код в буфер обмена
  1. <a href=?letter=urlencode($буква)> буква</a>

а в принимающей конструкции сделать наоборот

Страниц (6): « 1 [2] 3 4 5 6 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB