PHP警告:加载文件():I/O警告:无法加载外部实体Wordpress WP引擎

mnemlml8  于 2022-12-03  发布在  WordPress
关注(0)|答案(1)|浏览(167)

在WP引擎,我们的生产和暂存WordPress环境都运行PHP8.0。
使用WP引擎 Jmeter 板,我自动复制生产到暂存,并准备开始一个新的功能,但立即,我看到了一个新的项目,在暂存调试日志中,从来没有出现在生产网站/日志.我还没有能够向前移动,因为我已经检查了它是一个确切的副本的网站和WP引擎确认网站环境是相同的(php.ini等)

PHP Warning:  simplexml_load_file(): I/O warning : failed to load 
    external entity 
    /wp-content/uploads/2021/11/Group-345.svg; 
    in /nas/content/live/ecistage/wp- 
    content/themes/deci/inc/helpers.php 
    on line 246

helpers.php
以前创建WordPress主题的开发人员使用ACF Flexible Content构建了它。该错误与一个帮助函数有关,该函数获取SVG真实的大小(宽度+高度/视图框)并在宽度,高度属性中使用它。

function fix_wp_get_attachment_image_svg( $image, $attachment_id, $size, $icon ) {
        if ( is_array( $image ) && preg_match( '/\.svg$/i', $image[0] ) ) {
            if ( is_array( $size ) ) {
                $image[1] = $size[0];
                $image[2] = $size[1];
            } elseif ( ( $xml = simplexml_load_file( $image[0] ) ) !== false ) {
                $attr     = $xml->attributes();
                $viewbox  = explode( ' ', $attr->viewBox );
                $image[1] = isset( $attr->width ) && preg_match( '/\d+/', $attr->width, $value ) ? (int) $value[0] : ( count( $viewbox ) == 4 ? (int) $viewbox[2] : null );
                $image[2] = isset( $attr->height ) && preg_match( '/\d+/', $attr->height, $value ) ? (int) $value[0] : ( count( $viewbox ) == 4 ? (int) $viewbox[3] : null );
            } else {
                $image[1] = $image[2] = null;
            }
        }
        return $image;
    }

    add_filter( 'wp_get_attachment_image_src', 'fix_wp_get_attachment_image_svg', 10, 4 );

第246行是elseif语句:

} elseif ( ( $xml = simplexml_load_file( $image[0] ) ) !== false ) {

Group-34.svg的含量
https://gist.github.com/billiemead/c0d1a2703cdac8f4423b9ddd93cfcca7?short_path=5a8a6c7
到目前为止我已经:
·检查php_xml是否正在加载
·检查php.ini中的allow_url_fopen是否打开
·允许URL包含已打开
·创建了包含以下内容的simplexml.php:

<?php
 
    if (function_exists('simplexml_load_file')) {
        echo "simpleXML functions are available.<br />\n";
    } else {
        echo "simpleXML functions are not available.<br />\n";
    }

它确实回来了
simpleXML函数可用

gr8qqesn

gr8qqesn1#

我面临着同样的问题。在我的情况下,我的网站是在Azure服务器上。当我将开发网站迁移到Live(Azure托管WP计划)时,我面临着同样的问题。
此问题是由映像路径引起的。
一些托管的WordPress主机被配置为使用图像的相对URL而不是绝对URL。
在下面这行代码中,它检查图像的URL。在我/我们的情况下,这个条件本身将失败,因为相对路径返回404没有,因为它没有site_url。

} elseif ( ( $xml = simplexml_load_file( $image[0] ) ) !== false ) {

要确保是这种情况,您可以尝试在图像URL之前添加site_url(网站URL),如下面函数的第一行所示。

$image[0] = site_url().$image[0];

在进行此更改后,如果功能正常工作,则它必须是一个问题,因为图像URL(相对/绝对)。
如果你检查wp-config.php,你可以找到下面的代码行,它改变了图像显示在相对路径(/wp-content/uploads/2022/01/filename-png)而不是绝对路径(www.sitename.com/wp-content/uploads/2022/01/filename-png

define('WP_CONTENT_URL', '/wp-content');

可以通过在wp-config.php中注解此代码来修复此问题
此外,请确保删除添加到函数中的代码,以便将site_url添加到图像路径的开头。

相关问题