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

问题描述 投票:-1回答:2

我正在一个运行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版本

在此先感谢大家

php wordpress apache woocommerce
2个回答
0
投票

我认为问题出在这里

file_get_contents('php://input');

根据您的PHP配置,您可能需要更改php.ini中的allow_url_fopen设置。

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

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


-1
投票

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

第一个清空推车:

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

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

function custom_add_products_to_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();
};

它现在正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.