不允许使用文件类型-Cronjob

时间:2021-11-24 作者:Basti

我目前正在开发一个cron作业,它从外部源下载一个xml文件,并将其存储在wordpress媒体中。为了调试建议,我安装了插件Advanced Cron Manager,它允许我手动运行Cron作业。

cronjob的手动执行工作正常,没有任何问题。当cronjob按照其时间表执行时,我面临的问题是:;很抱歉,出于安全原因,不允许使用此文件类型;。

在我的cron函数中,我配置了:

/** Allow all filetypes to be uploaded */
define(\'ALLOW_UNFILTERED_UPLOADS\', true);
由于这不起作用,我还尝试添加ALLOW_UNFILTERED_UPLOADS 在我的wp-config.php, 结果是一样的。还将其添加到ALLOW_UNFILTERED_UPLOADS 至wp cron。php没有帮助。

在执行过程中,我还看到以下通知:

[24-Nov-2021 08:54:14 UTC] PHP Notice Constant ALLOW_UNFILTERED_UPLOADS already defined in /var/www/virtual/wpwwwdev/html/wp-content/plugins/phantoms-wp/includes/cron.php on line 16
所以常数是确定的。我还需要为cron调用设置其他内容吗?

错误由以下原因引发:

$file = [
    \'uri\' => \'https://vereine.football-verband.de/xmlspielplan.php5?Ausgabe=xml\',
    \'description\' => date(\'d.m.Y\', time()) . \' - XML Spielplan\',
    \'name\' => \'xmlspielplan.xml\',
    \'type\' => \'xml\',
    \'tmp_name\' => download_url(\'https://vereine.football-verband.de/xmlspielplan.php5?Ausgabe=xml\')
];

media_handle_sideload( $file, 0, $file[\'description\'] );
向你问好,塞巴斯蒂安

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

定义ALLOW\\u UNFILTERED\\u UPLOADS已经不够了:它不授予该功能,只允许具有UNFILTERED\\u UPLOADS功能的非管理员用户上载任何文件(多站点上的文件除外)。你还需要赋予自己这种能力,例如。from Sebastian\'s answer here

#
# For this, see: wp-includes/capabilities.php > map_meta_cap()
#
function wpse_6533_map_unrestricted_upload_filter($caps, $cap) {
  if ($cap == \'unfiltered_upload\') {
    $caps = array();
    $caps[] = $cap;
  }

  return $caps;
}

add_filter(\'map_meta_cap\', \'wpse_6533_map_unrestricted_upload_filter\', 0, 2);

但是,只为cron作业启用XML文件类型可能更简单,例如:。

function mime_types_add_xml( $mime_types ) {
    // PHP\'s fileinfo returns text/xml not application/xml
    $mime_types[ \'xml\' ] = \'text/xml\';
    return $mime_types;
}
if ( defined( \'DOING_CRON\' ) {
    add_filter( \'mime_types\', \'mime_types_add_xml\' );
}
然而,只有当XML文件具有文档声明时,这才会起作用,例如:。

<?xml version="1.0" encoding="utf-8"?>
WordPress使用PHP fileinfo来检测文件是否与您提供的扩展名匹配,这只会为我生成带有声明的文本/xml。(否则它将返回text/plain,然后拒绝该文件,因为该文件与.xml扩展名的预期text/xml不匹配。)如有必要,可以使用wp\\u check\\u filetype\\u和ext筛选器修复此检查。