Почему не срабатывает такой код не дает ни ошибки ни архив не создает?
почему не срабатывает такой код не дает ни ошибки ни архив не создает
На сайте wordpress сейчас делаем функционал при котором товары после оплаты упаковываются в архив. решили создать тестовый код который просто создаёт пустой архив, но, не получилось
Если нужно, то вот сайт https://atq-store.com/
$zip = new ZipArchive; $zip->open('./wp-content/uploads/myzip.zip', ZipArchive::CREATE); $zip->close(); |
$zip = new ZipArchive; $zip->open('./wp-content/uploads/myzip.zip', ZipArchive::CREATE); $zip->close();
Дополнительно:
А то что в прошлом вопросе спрашивал, там чего не ответили?
думают как сделать и исправить вот это
Дебажить надо, доки читать. нет смысла сидеть и думать...
https://www.php.net/manual/ru/ziparchive.open.php
$zip = new ZipArchive; $res = $zip->open('test.zip', ZipArchive::CREATE); if ($res === TRUE) { $zip->addFromString('test.txt', 'содержимое файла'); $zip->addFile('data.txt', 'entryname.txt'); $zip->close(); echo 'готово'; } else { echo 'ошибка '; var_dump($res); } |
$zip = new ZipArchive; $res = $zip->open('test.zip', ZipArchive::CREATE); if ($res === TRUE) { $zip->addFromString('test.txt', 'содержимое файла'); $zip->addFile('data.txt', 'entryname.txt'); $zip->close(); echo 'готово'; } else { echo 'ошибка '; var_dump($res); }
./wp-content/uploads/
Никогда так не делай.
Во первых путь сохранения файлов может быть изменён, а во вторых ВП в принципе работает с абсолютными ссылками.
С файлами нужно работать через вложения.
Ответы:
https://www.php.net/manual/en/zip.examples.php
1. Проверить на открытие потока
if ( $zip->open('./wp-content/uploads/myzip.zip', ZipArchive::CREATE) !== true) { throw new RuntimeException("Cannot open file"); } |
if ( $zip->open('./wp-content/uploads/myzip.zip', ZipArchive::CREATE) !== true) { throw new RuntimeException("Cannot open file"); }
2. Проверить на права на запись
3. Вполне возможно если архив пуст, то он банально не создается, пробуй что-то добавить
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Если код создания ZIP не даёт ошибки и не создаёт архив, первым делом включите нормальную диагностику. В WordPress ошибки часто скрыты, а операции с файлами могут молча не пройти из-за прав, пути, отсутствия расширения ZipArchive или запрета записи в папку.
Проверьте, доступен ли ZipArchive:
if (!class_exists('ZipArchive')) { error_log('ZipArchive extension is not installed'); return; }
Пишите архив в uploads, а не в случайную папку темы:
$upload = wp_upload_dir(); $zip_path = trailingslashit($upload['basedir']) . 'test-archive.zip'; $zip = new ZipArchive(); $result = $zip->open($zip_path, ZipArchive::CREATE | ZipArchive::OVERWRITE); if ($result !== true) { error_log('ZIP open error: ' . $result . ' path: ' . $zip_path); return; } $zip->addFromString('readme.txt', 'test'); $zip->close(); if (!file_exists($zip_path)) { error_log('ZIP file was not created: ' . $zip_path); }
Частые причины:
Если архив должен создаваться после оплаты, используйте подходящий hook WooCommerce, например
woocommerce_order_status_processingилиwoocommerce_payment_complete, и логируйте ID заказа.Итог: начните с минимального теста в uploads и проверки
ZipArchive. Когда пустой архив стабильно создаётся, уже добавляйте файлы товара и логику после оплаты.