【问题标题】:Wordpress PHP illegal string errorWordpress PHP 非法字符串错误
【发布时间】:2016-09-26 15:24:20
【问题描述】:

我在使用 wordpress 插件(客户订单 CSV 导出)时遇到了一些问题,由于某种原因,该插件已开始将错误警告放入导出的文件中。 这是说订单的每个部分都有一个非法的字符串偏移量(因此每个文件大约有 40 个警告)。我只附上了 order_number 的警告,但其余的都说相同的行:

<b>Warning</b>:  Illegal string offset 'order_number' in <b>/home/.../wp-content/plugins/woocommerce-customer-order-csv-export/includes/class-wc-customer-order-csv-export-generator.php</b> on line <b>709</b><br />
<b>Warning</b>:  Illegal string offset 'order_number' in <b>/home/.../wp-content/plugins/woocommerce-customer-order-csv-export/includes/class-wc-customer-order-csv-export-generator.php</b> on line <b>713</b><br />
<b>Warning</b>:  Illegal string offset 'order_number' in <b>/home/.../wp-content/plugins/woocommerce-customer-order-csv-export/includes/class-wc-customer-order-csv-export-generator.php</b> on line <b>713</b><br />

php 文件中的违规行如下所示:

private function write( $row ) {

    $data = array();

    foreach ( $this->headers as $header_key => $_ ) {

        if ( ! isset( $row[ $header_key ] ) ) {
            $row[ $header_key ] = '';
        }

        // strict string comparison, as values like '0' are valid
        $data[] = ( '' !== $row[ $header_key ] ) ? $row[ $header_key ] : '';
    }

    fputcsv( $this->stream, $data, $this->delimiter, $this->enclosure );
}

错误行是709:

$row[ $header_key ] = '';

和 713:

$data[] = ( '' !== $row[ $header_key ] ) ? $row[ $header_key ] : '';

环顾一些类似的问题,似乎与isset有关: as in this answerin this one。 我不确定如何修复我必须使它工作的代码,或者这确实是实际问题而不是其他问题。

导出的 csv 文件包含所有警告消息,每个订单后都在一个新行中。

任何帮助表示赞赏。

【问题讨论】:

  • 在你的 foreach 循环中定义正确的 keyvalue 并在 $data[] = ( '' !== $row[ $header_key ] ) ? $row[ $header_key ] : ''; 上替换这一行 $data[]=$row[$header_key]; 并让我知道它是否有效?
  • 谢谢。我试着按照你说的做,但这仍然产生相同的结果。可能是文件中其他地方的问题?

标签: php csv wordpress


【解决方案1】:

这个函数对我来说似乎有点矫枉过正,所以我会用更简单易懂的方式重写它。

private function write( $row ) {

$data = array();

foreach ( $this->headers as $header_key => $header_value ) {

    if ( !isset($row[$header_key]) ){
        $row[$header_key] = '';
    }
    $data[]=$row[$header_key];
}

fputcsv( $this->stream, $data, $this->delimiter, $this->enclosure );
}

我将其分解,因为所有代码实际上都是假设流、分隔符、附件变量和标头数组都存储在类中的其他位置。如果 headers 数组不包含字母数字索引,则会出现错误。

【讨论】:

  • 谢谢。我尝试用您编写的函数替换该函数,但它仍然给出相同的错误。也许我在文件的其他地方设置了错误的标题键?虽然看过去,但它看起来不是那样的。
  • 让我们调试一下。在private function write( $row ) { 正下方,将echo "&lt;!-- debug start--&gt;\n";print_r($row);echo "\n &lt;!-- debug end--&gt;\n" 添加到单独的行中,然后运行脚本。如果您使用浏览器,您可能会看到奇怪的输出,但没关系。只需转到查看源代码选项即可。在其中的某个地方,您会找到“调试开始”字样。在此处和“调试结束”之间,您会找到正在评估的数据,如果您在“调试开始”和“调试结束”之间没有看到“order_number”,那么您会看到您提到的错误。
  • 啊啊啊!!感谢迈克的帮助。它确实帮助我找到了问题的根源。当您找到它时,这非常简单(因为这些事情总是如此)。我的 functions.php 文件中有一个过滤器试图覆盖文件中的早期函数。我删除了这个过滤器,它一切正常。再次为您的时间和专业知识干杯;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多