PHP.SU

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

Страниц (1): [1]

> Найдено сообщений: 6
DanJake Отправлено: 17 Сентября, 2015 - 16:40:22 • Тема: Архивация директории • Форум: Работа с файловой системой и файлами

Ответов: 10
Просмотров: 12679
Viper пишет:
DanJake скорее всего неправильный путь к файлу.


к файлу, который я архивирую или к самому архиву?
DanJake Отправлено: 16 Сентября, 2015 - 22:43:18 • Тема: Архивация директории • Форум: Работа с файловой системой и файлами

Ответов: 10
Просмотров: 12679
Viper пишет:
DanJake пишет:
не подскажите, с чем это связанно ?
а глянуть что по этим строкам в этом файле?

в когда, котоырй выше, это 19 и 23 строка, ругается на фалсайз и анлинк, я так понял, оно не находит архив
DanJake Отправлено: 15 Сентября, 2015 - 21:26:45 • Тема: Скачивание архива • Форум: Вопросы новичков

Ответов: 1
Просмотров: 140
$pathdir='C:\XML'; // путь к папке, файлы которой будем архивировать
$nameArhive = 'test.zip'; //название архива
$zip = new ZipArchive; // класс для работы с архивами
if ($zip -> open($nameArhive, ZipArchive::CREATE) === TRUE){ // создаем архив, если все прошло удачно продолжаем
$dir = opendir($pathdir); // открываем папку с файлами
while( $file = readdir($dir)){ // перебираем все файлы из нашей папки
if (is_file($pathdir.$file)){ // проверяем файл ли мы взяли из папки
$zip -> addFile($pathdir.$file, $file); // и архивируем
//echo("Заархивирован: " . $pathdir.$file) , '<br/>';
}
}
$zip -> close(); // закрываем архив.
//echo 'Архив успешно создан';

//Высылаем пользователю архив
header ("Content-Type: application/octet-stream");
header ("Accept-Ranges: bytes");
header ("Content-Length: ".filesize($nameArhive));
header ("Content-Disposition: attachment; filename=".$nameArhive);
readfile($myFile);
//Удаляем файл
unlink($nameArhive);

}else{
die ('Произошла ошибка при создании архива');
}

пытаюсь добавить в архив папку XML, в которой лежат файлы xml , архив скачивается, но не открывается, //не удается открыть файл как архив

открываю его как текстовый там 2 варнинга


<b>Warning</b>: filesize() [<a href='function.filesize'>function.filesize</a>]: stat failed for test.zip in <b>C:\apache\localhost\www\save_xml.php</b> on line <b>113</b><br />

<br />
<b>Warning</b>: unlink(test.zip) [<a href='function.unlink'>function.unlink</a>]: No such file or directory in <b>C:\apache\localhost\www\save_xml.php</b> on line <b>117</b><br />
не подскажите, что не так?
DanJake Отправлено: 15 Сентября, 2015 - 21:23:06 • Тема: Архивация директории • Форум: Работа с файловой системой и файлами

Ответов: 10
Просмотров: 12679
dXdYdZ пишет:
Здравствуйте. Навскидку, всё можно сделать вот как:
PHP:
скопировать код в буфер обмена
  1.  
  2. $pathdir='test/'; // путь к папке, файлы которой будем архивировать
  3. $nameArhive = 'test.zip'; //название архива
  4. $zip = new ZipArchive; // класс для работы с архивами
  5. if ($zip -> open($nameArhive, ZipArchive::CREATE) === TRUE){ // создаем архив, если все прошло удачно продолжаем
  6.     $dir = opendir($pathdir); // открываем папку с файлами
  7.     while( $file = readdir($dir)){ // перебираем все файлы из нашей папки
  8.             if (is_file($pathdir.$file)){ // проверяем файл ли мы взяли из папки
  9.                 $zip -> addFile($pathdir.$file, $file); // и архивируем
  10.                 //echo("Заархивирован: " . $pathdir.$file) , '<br/>';
  11.             }
  12.     }
  13.     $zip -> close(); // закрываем архив.
  14.     //echo 'Архив успешно создан';
  15.  
  16. //Высылаем пользователю архив
  17. header ("Content-Type: application/octet-stream");
  18. header ("Accept-Ranges: bytes");
  19. header ("Content-Length: ".filesize($nameArhive));
  20. header ("Content-Disposition: attachment; filename=".$nameArhive);  
  21. readfile($filepath);
  22. //Удаляем файл
  23. unlink($nameArhive);
  24.  
  25. }else{
  26.     die ('Произошла ошибка при создании архива');
  27. }
  28.  


То есть после архивации мы высылаем HTTP-заголовки, сообщающие браузеру, что мы отдаём пользователю файл. У пользователя в этот момент открывается окно скачивания файла. После выдачи заголовков мы отправляем сам файл. Затем мы этот файл удаляем.


Воспользовался вашим методом, но скачанный архив не открывается, если открыть в как текстовый файл его, там 2 варнинга
b>Warning</b>: filesize() [<a href='function.filesize'>function.filesize</a>]: stat failed for test.zip in <b>C:\apache\localhost\www\save_xml.php</b> on line <b>113</b><br />

<b>Warning</b>: unlink(test.zip) [<a href='function.unlink'>function.unlink</a>]: No such file or directory in <b>C:\apache\localhost\www\save_xml.php</b> on line <b>117</b><br />
не подскажите, с чем это связанно ?
DanJake Отправлено: 20 Августа, 2015 - 16:25:45 • Тема: Выгрузка файлов • Форум: Вопросы новичков

Ответов: 4
Просмотров: 300
Viper пишет:
DanJake из вашего каламбура я понял, что вам нужно отдать юзеру все xml которые будут созданы на сервере?!
Если да, то проще в zip-архив и на скачивание отдавать его. Т.к. клеить несколько xml в один имхо дурная затея.


Да, отдать все xml с сервера, а без архива никак?в этом то и проблема, я не хочу, что бы при отдаче их пользователю, их клеило в 1 файл, а передавалось таким же количеством.

P.S. и извините за каламбур)пытался объяснить как можно понятней, а получилось как всегда
DanJake Отправлено: 20 Августа, 2015 - 11:40:45 • Тема: Выгрузка файлов • Форум: Вопросы новичков

Ответов: 4
Просмотров: 300
Добрый день, возник вопрос,
есть html страница, на которой есть строка поиска, и кнопка поиск, она отсылает php скрипту результат, который ввели в строку, подключается к базе и по этому id ищет (в моем случае это ид заказов, на примере онлайн заказов в неком магазине) после этого, на страничке с результатом поиска, есть кнопка сохранить в XML, и у меня оно сохраняется корректно, даже если с одним id 2 заказа(разные даты, к примеру 2014 и 2015 года) сохраняет их на сервер(если заказа 2 и более то соответствующее количество файлов xml), само собой, но я хочу, что бы сохранялись на компьютере пользователя, делал я это, сохранив xml на сервере, а после этого, достаю его, если файл 1, то все отлично, но если заказа было 2, оно из двух файлов, которые на сервере, достает инфу, и сохраняет в 1 xml файл на компьютере, скажите, возможно, что бы сохраняло столько же файлов, сколько их на сервере?

в таком формате я сохраняю xml файл на сервер, имя файлы выходит order_id заказа(дата) дата для случаев, когда заказа 2 и более с одним ид
$doc = new DOMDocument("1.0");
$root = $doc->createElement("order");
$root = $doc->appendChild($root);

$root->setAttribute("id", $ArrHead['id_order']);
$root->setAttribute("comment", "");
$root->setAttribute("name", " ".$ArrHead['fio']);
$root->setAttribute("phone", $ArrHead['phone']);

$filename = "\order_".$ArrHead['id_order']. "(" . $ArrHead['date'] . ").xml";

$doc->save("путь".$filename);

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB