在localhost与测试服务器(apache2)上使用PHP的奇怪问题

时间:2017-10-21 13:56:54

标签: php wordpress apache woocommerce

我正在运行WordPresswoocommerce

的网站

我有一个自定义功能,可以将东西添加到购物车中,如下所示:

function custom_add_products_to_cart(){
    WC()->cart->empty_cart();
    $request_body = file_get_contents('php://input');
    $decoded = json_decode($request_body);
    $cartElements = $decoded->addToCart;
    foreach ( $cartElements as $product_id ) {
        WC()->cart->add_to_cart( $product_id );
    }
    if ( $decoded->Uid ) {
        WC()->session->set( 'uid', $decoded->Uid );
    }
    die();
};

这是一个非常简单的功能。它所做的就是遍历产品ID列表并启动默认的Woocommerce添加到购物车功能。

我遇到的问题是,这在我的localhost上工作得很好(也调试它的行为就像预期的那样)但是当我在测试服务器上试用它时它不起作用。

该功能正在激活(我试图打印一些消息)但是购物车没有清空,并且没有添加新产品。

我检查代码,提交和修订,一切都正确。

它还能做什么?

我最后的想法是关于PHP的版本:

我的localhost运行7.1.2,而测试服务器运行7.0.22 - 它可以是PHP版本吗?关于我还能尝试什么的任何想法?

很抱歉,如果我无法提供更多详细信息,但不幸的是,还有更多信息要添加...

此外,我现在不会将此发布到WordPress社区,因为我认为它不是WordPress相关的东西(也不是woocommerce),而是PHP代码(可能我的功能有点不对?)或PHP版本

提前感谢所有人

2 个答案:

答案 0 :(得分:0)

我认为问题出在这里

file_get_contents('php://input');

取决于您的PHP配置,您可能需要更改php.ini中的allow_url_fopen设置。

你有两种方法可以绕过它而不用改变php.ini,其中一种是使用fsockopen(),另一种是使用cURL。

我建议使用cURL而不是file_get_contents(),因为它是为此而构建的。

答案 1 :(得分:-1)

最后,我只需通过调用两个函数来解决这个问题:

第一个清空推车:

#include "variables.h"    
...
global1 = foo;
...

并且第二个继续添加到购物车:

function empty_cart(){
    WC()->cart->empty_cart();
}

现在它正常运作。