当前位置: 首页 > 知识库问答 >
问题:

Wordpress PHP不完整

巫马承德
2023-03-14

我使用一个php函数来更新定量,价格etcc在我的WordPress网站每天。

下面是函数:

<?php

use Automattic\WooCommerce\Client;
function UpdateStock()
{
    require __DIR__ . '/vendor/autoload.php';
    
    set_time_limit(10000); //temps limite d'éxecution du code
    
    $filename = "path to csv file on a ftp"; //chemin vers le fichier csv du serveur ftp
   
    $handle = fopen($filename, "r");
    while (!feof($handle)) {
        $ligne[] = fgetcsv($handle, ',');

    }
  
    fclose($handle);
    $woocommerce = new Client(
    
        // Your store URL
      // Your consumer key
       // Your consumer secret
        [
            'wp_api' => true, // Enable the WP REST API integration
            'version' => 'wc/v3', // WooCommerce WP REST API version
            'query_string_auth' => true,
            'verify_ssl' => false
        ]
    );
     for ($item = 1; $item < count($ligne); $item++) {
        $cell = $ligne[$item];
         if ($cell[13] == "0") {       //change la valeur 0 en outofstock
            $statue = "outofstock";
        } elseif ($cell[13] == "1") {
            $statue = "instock";
        } elseif ($cell[13] == "backorder") {
            $statue = "onbackorder";
        } else {
            $statue = "outofstock";
        }


     if ($cell[1] == "simple") { // vérifie si le produit est un produit simple

            $data = [ //récupère les données descriptions, stoc_status, short description
                "description" => $cell[7],
                "name" => $cell[3],
                "stock_status" => $statue,
                "Short description" => $cell[8],
                "regular_price" => $cell[25],
                "sale_price" => $cell[24]
            
            ];
            try {
                $woocommerce->put('products/' . $cell[0], $data); // ajoute les données récupérées au produits
            } catch (Exception $e) {//si les infos n'ont pas été importés, affiche le message d'erreur
                echo 'une erreur est survenue à l article ' . $cell[0] . '</br>'; 
            }


        } else {
            $data = [
                "description" => $cell[7],
                "name" => $cell[3],
                "stock_status" => $statue,
                "regular_price" => $cell[25],
                "sale_price" => $cell[24]
            ];
            $path = 'products/' . $cell[43]. '/variations/'.$cell[0];
            echo $path;
            try {
                $woocommerce->put($path, $data);

            } catch (Exception $e) {
                echo 'une erreur est survenue à l article ' . $cell[0] . '</br>';
            }

        }
        
    }

}
?>

我使用PHP Cron status来检查函数是否执行,但它总是以5分钟的执行超时和PHP Cron status上的“未完成”状态结束。另外,我将最大内存分配设置为2048Mb,因为我有关于内存不足的错误日志。

是否有任何方法可以使此工作正常或获得有关错误的更多详细信息?谢谢

共有1个答案

章嘉致
2023-03-14

几乎可以肯定是记忆问题。检查excel文件的大小,看看它可能会消耗多少内存(请记住,对于相同的数据集,php数组比CSV文件需要更多的内存)。您正在循环通过一个非常起伏的数组(根据您的内存限制约2GB),这使得执行非常缓慢。一次处理一个csv行,这样就不必一直将所有数据保存在php内存中。

function updateStock()
{
    $filename = "path to csv file on a ftp"; //chemin vers le fichier csv du serveur ftp

    $woocommerce = new Client(
        [
            'wp_api' => true, // Enable the WP REST API integration
            'version' => 'wc/v3', // WooCommerce WP REST API version
            'query_string_auth' => true,
            'verify_ssl' => false
        ]
    );

    $handle = fopen($filename, "r");
    while (!feof($handle)) {
        $item = fgetcsv($handle, ',');
        processItem($woocommerce, $item);
        unset($item); // sometime php gc doesn't work properly, so it's better to explicitly free memory for heavy variables. 
    }

    fclose($handle);
}

function processItem(Client woocommerce, array $cell)
{
    if ($cell[13] == "0") {       //change la valeur 0 en outofstock
        $statue = "outofstock";
    } elseif ($cell[13] == "1") {
        $statue = "instock";
    } elseif ($cell[13] == "backorder") {
        $statue = "onbackorder";
    } else {
        $statue = "outofstock";
    }

    // ... the rest of your code here
}

顺便问一下,为什么您需要在函数中自动加载?看起来很奇怪。

 类似资料:
  • null openssl pkcs12-export-in cert1.pem-inkey privkey1.pem-out cert_and_key.p12-name certificate-cafile fullchain1.pem-caname root keytool-importKeystore-destStorePAS5W0RD123-destKeypass Pas5w0rd123-d

  • 描述 (Description) 当行不包含最多12个列时,Foundation会自动向右浮动最后一个元素。您可以将.end类包含在最后一个元素中,以使元素向左浮动。 例子 (Example) 以下示例演示了在Foundation中使用incomplete-rows - <!DOCTYPE html> <html> <head> <title>Foundation Templat

  • 我买了一个2.2米的模板,wordpress的限制设置为2米。 我正在托管服务器,因此我可以完全访问文件 > 然后设置php.ini不工作: php.ini//和php5.ini upload_max_filesize=32Mpost_max_size=32M 还尝试设置: wp-config.php定义(WP_MEMORY_LIMIT,64M); 也试过: No. htaccess file p

  • 问题内容: 问题描述 除其他事项外,我对模糊进行了管理,我想仅将其用于属性。问题是,如果设置为,它将完成并删除所有我想保留的动画。 基本上,我不希望动画师完成,因为这会清除其动画块。 考虑的解决方法 完成后重新添加动画 夹到类似 问题答案: 现在可以使用iOS11进行设置 在 当此属性的值为true时,动画制作结束时动画制作器将保持活动状态,并且不执行其完成处理程序。保持动画师处于活动状态,即使动

  • 我正在实施v2 Express Checkout Paypal集成;它工作正常,但是它并没有完全完成交易(商业帐户不接收付款)。 > 将生成令牌和订单ID。 我复制并粘贴给定的链接到URL栏,然后按回车键继续完成交易。。 事务完成并重定向到新的URL

  • 我正在将一个KML文件导入到fusion表中,发现缺少行—我只得到前4行。我在Google Earth中检查了该文件,所有多边形都显示得很好,因此我确信KML文件没有损坏。 当我第一次在GoogleDrive表中打开该文件时,它有一个注释,其中有17%是导入的,但随后就消失了。似乎导入没有完成。该文件为20MB。 任何提示或建议。我环顾四周,没有发现类似的问题。感谢指导员! PS:如果您对以下问题