无法使用FILE_EXISTS函数检查wp_IMAGE_EDITOR上传的图像是否存在

时间:2020-08-27 作者:Rahul K

我正在开发一个播客主题,我有一个表单,允许用户上传他们的播客封面艺术。播客封面艺术的尺寸应该在1400×1400和3000×3000以下,因为我们遵守iTunes的规定。

由于如此大的文件会影响网站的页面加载速度,我想将上传的图像调整为较小的大小,例如250×250,以便我们可以使用它在网页上显示。

我用过WP_Image_Editor::resize 函数可调整上载图像的大小,并WP_Image_Editor::save 函数来保存它。它实际上起了作用。我现在有两个不同的图像,具有两个不同的维度。由于我们的许多用户已经发布了带有较大图片的播客,我无法只显示压缩版本。相反i wanna check if a compressed version exists or not and show the image accordingly.

我用过PHP’sfile_exists 函数检查图像的压缩版本。但在压缩图像的情况下,它似乎总是返回false。但我可以通过浏览器输入完整地址来访问它。

file_exists(\'path/to/original_image\'); = true
file_exists(\'path/to/compressed_image\'); = false
我用过wp_handle_upload 上载原始图像,但wp_image_editor 类来调整和保存压缩的文件。所以这两个函数肯定有不同之处,导致了这个问题。

我在wordpress上主持了这个节目。当我试图通过FTP 我看不到它们,但可以通过浏览器访问。

你们知道我该怎么克服吗?任何帮助都将不胜感激。

提前谢谢。

编辑-更多信息这是我实际使用的代码,

if ( isset( $_FILES ) && isset( $_FILES[\'podcast_cover\'] ) ) {
    
    // Validating the file extension first,
  
    // And then the Image Mime Type

    $image = wp_get_image_editor( $_FILES[\'podcast_cover\'][\'tmp_name\'] );
    $size = $image->get_size();

    // Validating the size ...
    if ( $size[\'width\'] < 1400 ) {
        global $registration_errors;
        $registration_errors->add( \'podcast_cover\', \'The image should be atleast 1400x1400 in size.\' );
        return $this->redirect_back_to_form();
    } elseif ($size[\'width\'] > 3000) {
        global $registration_errors;
        $registration_errors->add( \'podcast_cover\', \'The image should not be over 3000x3000 in size.\' );
        return $this->redirect_back_to_form();
    }

    // Uploading the main one,
    $override = [\'test_form\' => false];
    $uploaded = wp_handle_upload( $_FILES[\'podcast_cover\'], $override );

    // Now compressing and saving the alternative one
    $pathinfo = pathinfo( $uploaded[\'url\'] );
    $image = wp_get_image_editor( $uploaded[\'url\'] );
    $image->resize( 250, 250 );
    $image->save( $pathinfo[\'dirname\'] . \'/\' . $pathinfo[\'filename\'] . \'-300x300.\' . $pathinfo[\'extension\'] );

}
These are the images i am referring to actually

Original Image : https://torontopodcaststudio.com/wp-content/uploads/2020/08/my-podcast-cover.jpg

Compressed Image : https://torontopodcaststudio.com/wp-content/uploads/2020/08/my-podcast-cover-300x300.jpg

ftp screenshot

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

当我在本地测试站点上使用您的精确代码时,我无法保存调整大小的图像。这是因为您正在将URL传递给wp_get_image_editor() 而不是路径。您还将URL传递给pathinfo(), 这也需要路径。

$pathinfo = pathinfo( $uploaded[\'url\'] );
$image = wp_get_image_editor( $uploaded[\'url\'] );
上述行需要:

$pathinfo = pathinfo( $uploaded[\'file\'] );
$image = wp_get_image_editor( $uploaded[\'file\'] );
这是因为file 返回的数组的键wp_handle_upload() 包含文件的路径,这是上述每个函数所需的路径。

我无法解释为什么您可以在浏览器中访问300x300版本。我测试时没有发生这种情况。它可能是特定于WordPress的东西。com托管环境。

相关推荐

Media uploads error

我对这个很陌生,昨天刚创建了我的网站。突然,我无法上传任何照片,并且显示了一个错误“上传时出错”。请稍后再试\'。我看到一个使用控制台的建议,它给出了一个错误,表示内容混合,并且我的页面是通过HTTPS加载的,但请求了一个不安全的样式表tp://fonts。googleapis。com/css?家庭=舞蹈+脚本(&P);ver=4.9.8’。此请求已被阻止;内容必须通过HTTPS提供。