Intereting Posts

Загрузка файла из front-end формы (как приложение) не работает

У меня есть интерфейсная форма, которая должна позволять пользователю загружать CV, которое затем отправляется вместе с остальной частью формы в виде вложения. Для этого я использовал wp_handle_upload() следующим образом:

 if ($_FILES) { if ( ! function_exists( 'wp_handle_upload' ) ) require_once( ABSPATH . 'wp-admin/includes/file.php' ); $uploadedfile = $_FILES['file']; $upload_overrides = array( 'test_form' => false ); $movefile = wp_handle_upload( $uploadedfile, $upload_overrides ); if ( $movefile ) { echo "File is valid, and was successfully uploaded.\n"; var_dump( $movefile); } else { echo "Possible file upload attack!\n"; } } 

Затем форма отправляется с помощью wp_mail после проверки на наличие ошибок: ( $receiver_email, $subject, $body, $headers все в порядке и можно увидеть здесь

 $attachments = $uploadedfile; if (wp_mail($receiver_email, $subject, $body, $headers, $attachments)) { $jobs_email_sent = true; } else { $jobs_email_sent_error = true; } 

Однако при var_dump($movefile) я получаю следующее из var_dump($movefile) .

 File is valid, and was successfully uploaded. array(1) { ["error"]=> string(212) "File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini or by post_max_size being defined as smaller than upload_max_filesize in php.ini." } 

И на самом деле нет привязанности к электронной почте. Я проверил php.ini и file_uploads действительно включен, а upload_max_filesize – 128M. Я попытался добавить файл pdf и jpg, которые являются довольно маленькими.

Я был бы очень признателен за то, что я здесь делаю неправильно.

UPDATE просто прочитайте, что для wp_mail() путь к файлу должен быть полностью указан как в $attachments = array(WP_CONTENT_DIR . '/uploads/file_to_attach.zip'); который должен быть возвращен в wp_handle_upload(); как файл.

Когда я var_dump ($ _ FILES), я получаю:

 array(1) { ["upload_file"]=> array(5) { ["name"]=> string(5) "3.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(14) "/tmp/php3aeSzD" ["error"]=> int(0) ["size"]=> int(53262) } } 

Мой файл называется 3.jpg.

Непроверенный, но я уверен, что это проблема:

Вы пытаетесь присоединить $uploadedfile к письму. Вы установили $uploadedfile в $_FILES['file'] . Это очень временное расположение файла / файла.

Когда вы используете wp_handle_upload вы хотите вместо этого использовать $movefile . Если вы посмотрите на запись Codex для этой функции, вы увидите, что вам нужно (возможно) $movefile['file'])