wp_generate_attachment_metadata输出文件内容而不是写入文件

时间:2013-11-27 17:58:54

标签: wordpress

我正在处理一个将图像添加到Wordpress媒体库的表单,除了以较小的尺寸创建其他图像外,一切都很好看。输出发生在multi_resize函数中的WP_Image_Editor类内部,随后发生在_save函数中。对imagetruecolortopalette的调用似乎是罪魁祸首。

输出如下:

�PNG  IHDR��<q� IDATx���w�%�u�����{�}��IA$(QL&iR����)[a%J���^����|����G^�u��ʒ쵨d[�LS��3��D�`��ͼ|�����?���t��$e�m�|���+�:�wN�V�}� ��xB��㝣�k��1�w߽(���O?�k�Kh�1�`��:�W����S�C����MӠ�b0��C)����])�1�=���ֶ�{��Z��c8�Whex��)��S��t�t���x�,�X��b< ����W������D��j��1u]3(G�#��t��4�W�9��0Z�]��#��TUM��ІAiP^����_�JO)�NFC�����(��K�b��[^s+?���GSM�F����(LAU5�|y����-eY��k��(�v���9�����(epΡ�B)0ư���ц�p�1���M������0��T>��S[YE{���#�yE���BkMY�-a���R�%km$��};��`@UU���-�y�c=��꺦i��n'/\�Ok�����X;emu����7.Q�cAԾkO�Hl�j�w��"9����w�=*�XM\���L��a.\�4X[QU�z���q���]Di�x��t:ƹ�\�?c�.�q�� EY�6�Oo��yH�i��8稪 �\�~�:�T{�1&֡0Fǹr4M�2k-�ɔ��(˂rP&��#�� ��n�$ ��e��i®q��%�K��v�����I.^�Ą��Zkq�kz���eپ�1EAQV+EQ��=s   �M=��I�6��k�j��F�ё@Q� �^iq�� �K�v���v��]R75�6J��};1F�}�s���¢�����'O�����`LJ�u�������AK(ι����i;MӴ���E���bKp���� ����>�� ~kF�;��E��t�uK�a'��1��`@w�;�L:̕��!/�����>^�IO ��ӮJm��pc-Mc�(EK�iPi����T�>�DY�P�`L���Z�� �J���4

通过管理员或重力表格上传和调整大小的正常Wordpress工作得很好,但我的功能会导致错误。

require_once(ABSPATH。'wp-admin / includes / image.php');

$upload_overrides = array( 'test_form' => false );
// http://codex.wordpress.org/Function_Reference/wp_handle_upload
$movefile = wp_handle_upload( $_FILES['image'], $upload_overrides );

if ( $movefile ) {

    // http://codex.wordpress.org/Function_Reference/wp_insert_attachment
    $wp_filetype = wp_check_filetype( basename( $movefile['url'] ), null );
    $wp_upload_dir = wp_upload_dir();
    $attachment = array(
        'guid' => $wp_upload_dir['url'] . '/' . basename( $movefile['url'] ),
        'post_mime_type' => $wp_filetype['type'],
        'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $movefile['url'] ) ),
        'post_content' => '',
        'post_status' => 'inherit'
    );
    $attach_id = wp_insert_attachment( $attachment, $movefile['url'] );
    $attach_data = wp_generate_attachment_metadata( $attach_id, $movefile['url'] );
    wp_update_attachment_metadata( $attach_id, $attach_data );

    $result = array(
        'id' => $attach_id,
        'resized' => $resized,
        'test' => $wp_upload_dir
    );

    echo json_encode( $result );

    exit;
}

有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:2)

澄清解决方案(因为它花了我一个时间来弄明白):你必须通过wp_generate_attachment_metadata相对目录路径,而不是带有 http:// 的URL路径在前面。

所以而不是:

$attach_data = wp_generate_attachment_metadata( $attach_id, $movefile['url'] );

应该是:

$attach_data = wp_generate_attachment_metadata( $attach_id, ($wp_upload_dir['path'] . '/' . basename( $movefile['url'] )) );

请注意,我使用了wp_upload_dir路径属性,而不是 url 属性。

答案 1 :(得分:0)

wp_generate_attachment_metadata需要一个目录路径,而不是我传递的文件URL。

答案 2 :(得分:-1)

也许没有安装imagemegick?因为这个函数使用imagmagick来调整图片大小以缩略图在控制台中尝试:

Error: Expected configuration value providers.facebook-oauth2.apiKey to be defined!

不要忘记重启apache