Почему не срабатывает такой код не дает ни ошибки ни архив не создает?

Ссылка скопирована
1 ответ

почему не срабатывает такой код не дает ни ошибки ни архив не создает

На сайте 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); }

  • sherl221, создание пустого архива может и не работать (тут авторы решили), возможно в него надо хоть что-нибудь положить... Ну это так, гадание на чаинках.
  • ./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. Вполне возможно если архив пуст, то он банально не создается, пробуй что-то добавить

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Алексей Денисов Ответ

    Если код создания ZIP не даёт ошибки и не создаёт архив, первым делом включите нормальную диагностику. В WordPress ошибки часто скрыты, а операции с файлами могут молча не пройти из-за прав, пути, отсутствия расширения ZipArchive или запрета записи в папку.

    Проверьте, доступен ли ZipArchive:

    if (!class_exists('ZipArchive')) {
        error_log('ZipArchive extension is not installed');
        return;
    }

    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);
    }

    $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); }

    Частые причины:

    • на сервере не установлено PHP-расширение zip;
    • путь указывает не туда, куда вы думаете;
    • нет прав на запись;
    • open_basedir запрещает доступ к папке;
    • код запускается не там, где ожидается;
    • после оплаты хук WooCommerce не срабатывает из-за статуса заказа;
    • архив создаётся, но в другой директории.

    Если архив должен создаваться после оплаты, используйте подходящий hook WooCommerce, например woocommerce_order_status_processing или woocommerce_payment_complete, и логируйте ID заказа.

    Итог: начните с минимального теста в uploads и проверки ZipArchive. Когда пустой архив стабильно создаётся, уже добавляйте файлы товара и логику после оплаты.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно