WooCommerce 3.5.4 和 WordPress 5.0.3 REST API:图像上传损坏 (woocommerce_product_invalid_image_id)

2023-12-04

我正在使用 REST API v2。此代码在旧版本的 WordPress 和 WooCommerce 上运行良好。我无法将图像上传到产品。

升级后我遇到的第一个错误是:

array (
  'code' => 'woocommerce_product_image_upload_error',
  'message' => 'Invalid image: Sorry, this file type is not permitted for security reasons.',
  'data' => 
  array (
    'status' => 400,
  ),

通过添加以下内容解决wp-config.php到文件底部:

define('ALLOW_UNFILTERED_UPLOADS', true);

我无法弄清楚第二个错误。该图像无法上传,并在上传位置留下重影图像。

Code

<?php
require __DIR__ . '/vendor/autoload.php';

use Automattic\WooCommerce\Client;

$woocommerce = new Client(
    'http://localhost/wordpress', 
    'ck_44b92c00ea35e6cc59c89c29051bf67c22e0df3a', 
    'cs_dd833592a1ef7a00a82c1711fd455db2e4c5bd15',
    [
        'wp_api' => true,
        'version' => 'wc/v2',
    ]
);

$data['create'][] = array(
    'name' => 'TEST',
    'regular_price' => '4.50',
    'description' => 'TEST DESC',
    'type' => 'simple',
    'images' => array(
        array(
            'alt' => '',
            'name' => '',
            'src' => 'http://demo2.phppointofsale.com/PHP-Point-Of-Sale-Prev/index.php/app_files/view/1',
            'position' => 0,
        ),
    )
);


$response = $woocommerce->post('products/batch',$data);
$headers = $woocommerce->http->getResponse()->getHeaders();
var_dump($headers);
var_dump($response);

响应数据

array(13) {
  ["Date"]=>
  string(29) "Thu, 24 Jan 2019 18:22:16 GMT"
  ["Server"]=>
  string(6) "Apache"
  ["X-Powered-By"]=>
  string(9) "PHP/7.2.1"
  ["X-Robots-Tag"]=>
  string(7) "noindex"
  ["Link"]=>
  string(63) "<http://localhost/wordpress/wp-json/>; rel="https://api.w.org/""
  ["X-Content-Type-Options"]=>
  string(7) "nosniff"
  ["Access-Control-Expose-Headers"]=>
  string(27) "X-WP-Total, X-WP-TotalPages"
  ["Access-Control-Allow-Headers"]=>
  string(27) "Authorization, Content-Type"
  ["Expires"]=>
  string(29) "Wed, 11 Jan 1984 05:00:00 GMT"
  ["Cache-Control"]=>
  string(36) "no-cache, must-revalidate, max-age=0"
  ["Allow"]=>
  string(16) "POST, PUT, PATCH"
  ["Content-Length"]=>
  string(3) "139"
  ["Content-Type"]=>
  string(31) "application/json; charset=UTF-8"
}
array(1) {
  ["create"]=>
  array(1) {
    [0]=>
    array(2) {
      ["id"]=>
      int(0)
      ["error"]=>
      array(3) {
        ["code"]=>
        string(36) "woocommerce_product_invalid_image_id"
        ["message"]=>
        string(27) "#82 is an invalid image ID."
        ["data"]=>
        array(1) {
          ["status"]=>
          int(400)
        }
      }
    }
  }
}

Proof https://via.placeholder.com/350x150是一个图像

cmuench@cmuench:~$ curl -I "https://via.placeholder.com/350x150";
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Mon, 28 Jan 2019 14:07:22 GMT
Content-Type: image/png
Content-Length: 1253
Last-Modified: Sun, 06 Jan 2019 22:00:10 GMT
Connection: keep-alive
ETag: "5c327a6a-4e5"
Expires: Mon, 04 Feb 2019 14:07:22 GMT
Cache-Control: max-age=604800
X-Cache: L1
Accept-Ranges: bytes

http://demo2.phppointofsale.com/PHP-Point-Of-Sale-Prev/index.php/app_files/view/1

来自实际文件的标头(不是演示示例)。与演示示例相同的错误

    header("Cache-Control: max-age=2592000");
    header('Expires: '.gmdate('D, d M Y H:i:s', strtotime('+1 month')).' GMT');
    header('Pragma: cache');
    header('Content-Disposition: inline; filename="'.$file_name.'"');
    header("Content-type: ".get_mime_by_extension($file->file_name));

由于 url 的名称中不包含文件扩展名,Wordpress 将其视为没有扩展名的文件,从而导致失败wp_check_filetype_and_ext test.

您可以添加过滤器以在 url 中不存在的地方添加正确的文件扩展名

add_filter('wp_handle_sideload_prefilter', 'add_extension_if_none_exists');

function add_extension_if_none_exists($file){
    if ( pathinfo( $file['name'], PATHINFO_EXTENSION ) ) {
        return $file;
    }
    $real_mime = wp_get_image_mime( $file['tmp_name'] );
    $mime_to_ext = apply_filters(
        'getimagesize_mimes_to_exts',
        array(
            'image/jpeg' => 'jpg',
            'image/png'  => 'png',
            'image/gif'  => 'gif',
            'image/bmp'  => 'bmp',
            'image/tiff' => 'tif',
            'image/webp' => 'webp',
        )
    );
    if ( ! empty( $mime_to_ext[ $real_mime ] ) ) {
        $file['name'] .= '.' . $mime_to_ext[ $real_mime ];
    }
    return $file;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WooCommerce 3.5.4 和 WordPress 5.0.3 REST API:图像上传损坏 (woocommerce_product_invalid_image_id) 的相关文章

  • 保存多对多关系,同步/附加不存在?

    我有以下两个多对多关系的模型 use Illuminate Database Eloquent Model class Permission extends Model The database table used by the mode
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int
  • 检查 $_POST 数据

    我正在对表单进行一些垃圾邮件检查 下面的代码在我的本地主机上正常工作 如果为 true 则重定向到 google com 但是 当它在生产服务器上时却不起作用 执行脚本的其余部分并且不重定向到 Google com if POST SERV
  • php curl 使用 GET 发送变量 奇怪的结果

    我正在尝试调用远程站点上页面中的网址 决定使用curl 在远程站点上 url 变量显示为 REQUEST Array var1 gt val1 amp var2 gt val2 amp var3 gt val3 被调用的url是 http
  • 如何从父类中获取子类名

    我试图在不需要子类上的函数的情况下完成此任务 这可能吗 我有一种感觉 但我真的很想确定
  • 如何在laravel中注册后自动登录

    我在 laravel 中注册用户时遇到问题 user假设是包含所有数组元素的数组 同时自动登录以下代码结果false 数据库中保存的密码是hash make password user id this gt user model gt ad
  • 使用 php-ews(Exchange Web 服务)在特定日期后获取电子邮件

    在我的 PHP 脚本中 我需要弄清楚如何检索指定消息 ID 之后或特定日期之后的所有电子邮件 两者都可以 我只需要检索自上次抓取收件箱以来的新电子邮件 这个收件箱每天收到数千封电子邮件 而且我在 30 天内无法删除任何电子邮件 对于初始导入
  • php 数组中出现意外的 json 输出结构

    我正在尝试转换动态数据 如何从 PHP 获取此 JSON JSON 122240cb 253c 4046 adcd ae81266709a6 item 0 3 这就是我所做的 但它不起作用 PHP json array 122240cb 2
  • 免费 PHP 登录库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • PHP 通过 SSL 连接到 MS SQL

    我想要实现的目标非常简单 我想通过安全连接从 PHP 脚本连接到外部 MS SQL 数据库 然而 这已被证明是有问题的 到目前为止 经过三个小时的研究 我不知所措 客户端的平台是Ubuntu 这意味着我无法使用SQLSRV 安全连接已经在不
  • Yii2 - 错误请求 (#400) |前端和后端cookie

    仅当我打开时才会出现此问题frontend and backend在相同的browser 设想 与后端交互 gt 切换选项卡 gt 与前端交互 gt 切换选项卡返回 gt 与后端交互 gt 错误请求 400 Cookie 后端 identi
  • 如何在 PHP 的 HTML 页面中显示错误消息?

    我有以下登录表单 login php 其中要求输入用户名和密码
  • 如何在 JavaScript 中创建服务器端进度指示器?

    我想在我的网站中创建一个部分 用户可以在其中进行一些简单的操作update纽扣 这些中的每一个update按钮将发送到服务器 并在幕后进行长时间的处理 当服务器处理数据时 我希望用户有某种进度指示器 例如进度条或文本百分比 我使用 jQue
  • PHP 中标头的使用

    非常简单的问题 这两个 PHP 版本 5 标头调用中哪一个是 最好的 header Not Modified true 304 header HTTP 1 1 304 Not Modified 我很确定第一个是最多价的 但只是好奇如果在 H
  • 使用值填充的 Symfony2 自定义字段类型

    这是先前问题的后续问题Symfony2 自定义表单类型或扩展 https stackoverflow com questions 24079288 symfony2 custom form type or extension 我正在尝试为订
  • 带倒计时的php循环

    假设我从 400 开始计数器 我将如何执行一个向后运行直到 0 的 foreach 循环 伪代码 i 400 foreach SOMETHING do stuff i for i 400 i gt 0 i do stuff 其他方法 i 4
  • 字符串相似度的算法(比Levenshtein和similar_text更好)? php, Js

    在哪里可以找到比 levenshtein 和 phpimilar text 方法更准确地评估错误字符的拼写的算法 Example similar text jonas xxjon similar echo similar returns 6
  • PHP session_regenerate_id 和黑莓浏览器

    问候 我正在开发一个登录系统 并陷入了黑莓浏览器身份验证的困境 他们似乎对 PHP 的 session regenerate id 有问题 有人可以建议替代方案吗 以下是身份验证和登录脚本 UPDATE看来会话一般都不起作用 拿出 sess
  • PHP 表单 - 带验证蜜罐

    我有以下内容 效果很好 但对垃圾邮件机器人开放 我想放入蜜罐 而不是验证码 下面的代码适用于验证姓名 电子邮件 消息 但我无法让它与蜜罐一起工作 任何人都可以查看 蜜罐 代码并告诉我如何修复它吗 我希望表单给出 success2 不允许垃圾
  • 如何在 PHP 5.6 中通过 php.ini 设置“verify_peer_name=false”SSL 上下文选项

    案例 我想打开 SSL 连接localhost而 SSL 证书是 FQDN 的问题 问题 没有进行特殊处理就行 下面的程序失败并显示以下消息 PHP Warning stream socket enable crypto Peer cert

随机推荐

  • 异步/等待与线程

    在 Net 4 5 中 微软添加了新的Async Await简化异步编码的功能 然而 我想知道 Can Async Await完全取代旧的使用方式Threads Is Async Await有能力做任何事Thread可以做 异步 Can A
  • CakePHP - 创建一个编辑同一模型的多行的表单

    我正在尝试构建一个由属于主题组的主题组成的表单 从视觉上看 主题显示在页面上每个主题组标题下 您将能够编辑主题组或单个主题的名称 如果我给你一个 HTML 的例子 div class heading div
  • 找不到元素“赋值”的声明

    所以我从 XML 和模式开始 今天我遇到了这个 但我还没能弄清楚 我收到错误消息 Ln 5 Col 2 找不到 元素 赋值 的声明 我相信我已经声明了该元素 但也许我遗漏了一些东西并且没有声明 这是我的 XML 文件
  • 如何正确使用线性渐变?

    我对 CSS3 还很陌生 我的项目的 CSS 文件中有以下样式 headerDiv background image linear gradient 04519b 044687 60 033769 我很清楚什么linear gradient
  • Watson 检索和排名 - 手动排名

    我正在尝试建立一个排名器进行演示 我进行了 自动训练 并且得到了不错的结果 可能会更好 我正在尝试进行手动训练 但我对 Bluemix 在线文档中参数的含义感到困惑 https www ibm com watson developerclo
  • PayPal 沙盒错误:Cookie 被阻止

    我正在使用贝宝沙箱帐户 一切正常 但是 现在它显示以下错误 cookie 已启用 我尝试使用不同的浏览器和不同的计算机 我仍然遇到同样的错误 我尝试清除cookies和缓存 但这没有用 有什么解决办法吗 请开启cookies以结帐 这是 P
  • Rails 4 模型始终返回 nil

    我对以下错误感到疯狂 我有一个 User 类 它的两个属性 生日和created at gt datetime 总是返回nil 除了它在数据库上有一个值 我正在使用设备来管理身份验证 这是数据库表 CREATE TABLE users id
  • 使用容器中的第 n 个元素,但使用另一个键

    我有两个向量 一种实际保存数据 假设是浮动 另一种保存索引 我想通过nth element索引向量 但我希望通过实际保存数据的向量来完成比较 我正在考虑一个函子 但我猜这仅提供了 运算符 我通过将数据向量设为全局向量来实现这一目标 但这当然
  • 如何使用Reactor(Spring WebClient)进行重复调用?

    我使用 Reactor Spring5 WebClient 作为我的反应式编程 API 我有 2 个 REST 端点要调用 第一个结果将作为第二个结果的参数 对于第二个 API 它将返回带有 hasMore 值的结果 如果这个值是true
  • 为什么H1标签不需要CSS中的类或id?

    我只是查看我的 CSS h1 标签的定义如下 h1 当其他所有内容都有 id 或 时它前面的类 标题标签不需要这个的原因是什么 我是否真的犯了一个错误 而他们确实需要一个错误 这意味着所有发生的情况 of h1会分享相同的风格 同样 您可以
  • 与机器相关的 _write 失败,并显示 EINVAL 错误代码

    在实际问题之前 这有一些冗长的背景 但是 它需要一些解释 以期消除一些转移注意力的内容 我们的应用程序是用 Microsoft Visual C 2005 开发的 使用第 3 方库 我们幸运地拥有其源代码 来导出另一个第 3 方应用程序中使
  • Mongo 和 find 始终限制为 100 个地理数据

    在尝试尝试 mongo 性能时 我发现 mongodb 的行为很奇怪 首先我用以下查询填充它 for i 0 i lt 10000000 i db location insert id Math floor Math random 1000
  • Android xxhdpi、420 ​​dpi 和 480 dpi

    我面临下一个问题 我有一个values xxhdpi 及其dimensions xml 480 dpi 的设备非常适合此文件夹 问题是 例如三星 Galaxy S4 或 S5 会从该文件夹中捕获值 但在屏幕上看起来不太好 因为它们的分辨率为
  • JavaScript 专家请注意:需要 setInterval() 方面的帮助

    我正在尝试为房地产商店橱窗制作非交互式展示 我已经有一段时间没玩了setInterval 我的脚本第一次执行时 一切都很好 但是当它尝试通过以下方式获取下一个属性时getNextProperty 它开始变得混乱 如果您有 Firebug 或
  • 从OutputStream创建InputStream的最有效方法

    这一页 http blog ostermiller org convert java outputstream inputstream描述如何从OutputStream创建InputStream new ByteArrayInputStre
  • 如何在 android pie(9) 设备中获取当前的 wifi 连接名称?

    我知道这对你来说很简单 在这里 我只是尝试在 Android Pie 设备中获取 WiFi 名称 借助下面的代码行 我可以获取 Nogout 设备的 WiFi 名称 String ssid wifiInfo getSSID 我已经尝试了很多
  • 如何根据创建日期以外的其他时间对 Sitecore 项目进行存储?

    我将 Sitecore 与 DMS Sitecore 7 2 结合使用 并在布局上设置各种控件 以根据用户个人资料卡从不同文件夹中提取内容 我希望这些文件夹成为 桶 文件夹 因为每个个人资料卡都有一个文件夹 对于作者来说 每次新的个人资料卡
  • 创建一个 Pandas 数据框,其中包含跨越某个日期范围的项目计数

    我有一个 DF 有两个感兴趣的日期 看起来有点像 LIST DATE END DATE 2000 04 18 2000 05 17 00 00 00 2000 05 18 2000 09 18 00 00 00 2000 04 18 200
  • 可以将 Google 模块与 Eclipse 的 Google 插件一起使用吗?

    我的目标是开发使用新 Google 模块的 Java 应用程序 我想使用适用于 Eclipse 的 Google 插件 因为它易于调试并上传到 Google 问题是我不知道是否可以将 Google Plugin for Eclipse 用于
  • WooCommerce 3.5.4 和 WordPress 5.0.3 REST API:图像上传损坏 (woocommerce_product_invalid_image_id)

    我正在使用 REST API v2 此代码在旧版本的 WordPress 和 WooCommerce 上运行良好 我无法将图像上传到产品 升级后我遇到的第一个错误是 array code gt woocommerce product ima