Re: PHP 5.4 warnings: Illegal string offset
After using php 5.4.7 on my local development server it threw this warning when entering into an order detail page in the admin.
[07-May-2013 21:53:52 UTC] PHP Warning: Illegal string offset 'id' in D:\.....\public_html\tienda\includes\modules\payment\cod.php on line 41
After reading this post
http://www.zen-cart.com/showthread.p...om-empty-value
I changed this
PHP Code:
if ( ($this->enabled == true) && ((int)MODULE_PAYMENT_COD_ZONE > 0) ) {
$check_flag = false;
$check = $db->Execute("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_PAYMENT_COD_ZONE . "' and zone_country_id = '" . $order->delivery['country']['id'] . "' order by zone_id");
to this
PHP Code:
if ( ($this->enabled == true) && ((int)MODULE_PAYMENT_COD_ZONE > 0) && isset($order->delivery['country']['id']) ) {//steve added last clause for php 5.4.7
$check_flag = false;
$check = $db->Execute("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_PAYMENT_COD_ZONE . "' and zone_country_id = '" . $order->delivery['country']['id'] . "' order by zone_id");
The line 41 mentioned in the debug log is the $check = $db->Execute...
The error stopped and the page seems to work ok.
Re: PHP 5.4 warnings: Illegal string offset
How to fix line 355 of order.php?
Code:
'shipping_cost' => $_SESSION['shipping']['cost'],
Re: PHP 5.4 warnings: Illegal string offset
Quote:
Originally Posted by
lat9
OK, according to
http://php.net/manual/en/language.types.string.php:
"As of PHP 5.4 string offsets have to either be integers or integer-like strings, otherwise a warning will be thrown. Previously an offset like "foo" was silently cast to 0."
It looks like a relatively small change to three files removes the warning:
/includes/modules/pages/checkout_shipping/header_php.php, starting around line 70:
Code:
/*-bof BUGFIX: lat9-d
require(DIR_WS_CLASSES . 'order.php');
$order = new order;
-eof BUGFIX: lat9-d */
// register a random ID in the session to check throughout the checkout procedure
// against alterations in the shopping cart contents
if (isset($_SESSION['cart']->cartID)) {
if (!isset($_SESSION['cartID']) || $_SESSION['cart']->cartID != $_SESSION['cartID']) {
$_SESSION['cartID'] = $_SESSION['cart']->cartID;
}
} else {
zen_redirect(zen_href_link(FILENAME_TIME_OUT));
}
// if the order contains only virtual products, forward the customer to the billing page as
// a shipping address is not needed
// if ($order->content_type == 'virtual') { BUGFIX: lat9-d
if ($_SESSION['cart']->get_content_type() == 'virtual') { /* BUGFIX: lat9-a */
// $_SESSION['shipping'] = 'free_free'; BUGFIX: lat9-d
$_SESSION['shipping']['title'] = 'free_free';
$_SESSION['shipping']['id'] = 'free_free'; /* BUGFIX: lat9-a */
$_SESSION['shipping']['cost'] = 0; /*BUGFIX: lat9-a */
$_SESSION['sendto'] = false;
zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'));
}
require(DIR_WS_CLASSES . 'order.php'); /* BUGFIX: lat9-a */
$order = new order; /* BUGFIX: lat9-a */
/includes/modules/pages/checkout_payment/header_php.php (line 36):
Code:
if (isset($_SESSION['shipping']['id']) && $_SESSION['shipping']['id'] == 'free_free' && defined('MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER') /*-bof BUGFIX lat9-a */ && $_SESSION['cart']->get_content_type() != 'virtual' /*-eof BUGFIX lat9-a */ && $_SESSION['cart']->show_total() < MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER) {
zen_redirect(zen_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
}
/includes/modules/pages/checkout_confirmation/header_php.php (line 43):
Code:
if (isset($_SESSION['shipping']['id']) && $_SESSION['shipping']['id'] == 'free_free' && defined('MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER') /*-bof BUGFIX lat9-a */ && $_SESSION['cart']->get_content_type() != 'virtual' /*-eof BUGFIX lat9-a */ && $_SESSION['cart']->show_total() < MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER) {
Hey lat9 I did all this and still getting
Quote:
code
[31-Oct-2013 15:09:14 America/New_York] PHP Warning: Illegal string offset 'title' in /home/xxxxxx/public_html/includes/classes/order.php on line 354
[31-Oct-2013 15:09:14 America/New_York] PHP Warning: Illegal string offset 'cost' in /home/xxxxxx/public_html/includes/classes/order.php on line 356
Any ideas thanks.
Re: PHP 5.4 warnings: Illegal string offset
Quote:
Originally Posted by
lat9
Using a stock v1.5.1 install (localhost) running php 5.4.8 on Windows 7. Added the product New v1.2 -> Downloads -> Single Download to my cart, signed in and clicked the Checkout button. I was properly redirected to the checkout_payment page, but had two debug*.log files generated:
Code:
[19-Nov-2012 20:12:07 Europe/Berlin] PHP Warning: Illegal string offset 'cost' in C:\xampp\htdocs\v1.5.1\includes\classes\order.php on line 355
[19-Nov-2012 20:12:07 Europe/Berlin] PHP Warning: Illegal string offset 'title' in C:\xampp\htdocs\v1.5.1\includes\modules\pages\checkout_shipping\header_php.php on line 88
Code:
[19-Nov-2012 20:12:08 Europe/Berlin] PHP Warning: Illegal string offset 'cost' in C:\xampp\htdocs\v1.5.1\includes\classes\order.php on line 355
[19-Nov-2012 20:12:08 Europe/Berlin] PHP Warning: Illegal string offset 'id' in C:\xampp\htdocs\v1.5.1\includes\classes\shipping.php on line 32
[19-Nov-2012 20:12:08 Europe/Berlin] PHP Warning: Illegal string offset 'id' in C:\xampp\htdocs\v1.5.1\includes\classes\shipping.php on line 32
[19-Nov-2012 20:12:08 Europe/Berlin] PHP Warning: Illegal string offset 'id' in C:\xampp\htdocs\v1.5.1\includes\modules\order_total\ot_shipping.php on line 41
[19-Nov-2012 20:12:08 Europe/Berlin] PHP Warning: Illegal string offset 'id' in C:\xampp\htdocs\v1.5.1\includes\modules\order_total\ot_shipping.php on line 41
In each case, the illegal offset is associated with an undefined array element. For example, line 355 of order.php contains:
Code:
'shipping_cost' => $_SESSION['shipping']['cost'],
I'm not quite sure how to proceed. Are these warnings indicative of something that might become errors in a future version of PHP?
Quote:
Originally Posted by
rozdesignz
[04-Feb-2013 06:37:25 Australia/Melbourne] PHP Warning: Illegal string offset 'cost' in /../../../htdocs/store/includes/classes/order.php on line 349
not sure how to remedy this? thanks, Lora
Quote:
Originally Posted by
zch0071
How to fix line 355 of order.php?
Code:
'shipping_cost' => $_SESSION['shipping']['cost'],
The following changes are incorporated into the next ZC version to handle the errors reported in this thread:
https://github.com/zencart/zencart/c...2cb78fc86946c9
https://github.com/zencart/zencart/c...6deb80026d2886
Re: PHP 5.4 warnings: Illegal string offset
When is the next zc version coming out? I have until Dec 1st before my host forces me into php 5.4, and I have looked at multiple pages of fixes, and this appears to be a very convoluted problem.
Re: PHP 5.4 warnings: Illegal string offset
It is indeed a complex problem.
The links above are what will be included in the next version, specifically to address this problem.
Re: PHP 5.4 warnings: Illegal string offset
Those two pages are missing one.
includes/modules/shipping_estimator.php
Add to line 46:
Code:
require_once('includes/classes/http_client.php'); // shipping in basket
//PHP5.4 fix
$order = new stdClass();
/*
// moved below and altered to include Tare
// totals info
$totalsDisplay = '';
Re: PHP 5.4 warnings: Illegal string offset
Quote:
Originally Posted by
DrByte
It is indeed a complex problem.
The links above are what will be included in the next version, specifically to address this problem.
Host just moved the account with a ZC 1.51 shop.
Before the move was running PHP 5.4.15, with no errors appearing in /logs.
But now, following the move to the newer server running PHP 5.4.20, I'm observing repeating cluster of errors in /logs, similar to those which others have posted to this thread.
Code:
[09-Nov-2013 17:32:20 America/Chicago] PHP Warning: Illegal string offset 'title' in /home/acct/public_html/shop/includes/modules/pages/checkout_shipping/header_php.php on line 88
[09-Nov-2013 17:32:20 America/Chicago] PHP Warning: Illegal string offset 'cost' in /home/acct/public_html/shop/includes/classes/order.php on line 355
[09-Nov-2013 17:32:20 America/Chicago] PHP Warning: Illegal string offset 'id' in /home/acct/public_html/shop/includes/classes/shipping.php on line 32
[09-Nov-2013 17:32:20 America/Chicago] PHP Warning: Illegal string offset 'id' in /home/acct/public_html/shop/includes/classes/shipping.php on line 32
[09-Nov-2013 17:32:20 America/Chicago] PHP Warning: Illegal string offset 'id' in /home/acct/public_html/shop/includes/modules/order_total/ot_shipping.php on line 41
[09-Nov-2013 17:32:20 America/Chicago] PHP Warning: Illegal string offset 'id' in /home/acct/public_html/shop/includes/modules/order_total/ot_shipping.php on line 41
So in this specific situation, might the two posted github 1.60 commits be compatible with 1.51 as well?
Re: PHP 5.4 warnings: Illegal string offset
As a followup to my post above...
In my attempt to squash the warnings filling up the Zen Cart /logs directory I visited the PHP Switcher in Control Panel. It was set to "native" (at the same time Zen Cart reports PHP 5.4.20).
After switching to PHP 5.3, the catalog side of Zen Cart behaved well, but when I logged into the admin side I observed only white space. So I reset the switcher back to "native" everything was back to normal, except for the warnings continuing to fill /logs.
To test things further I switched to "5.4", and also could not log into ZC admin. So back to "native" it is.
Not sure of the diff between native and 5.4. More research to do.
So is it safe to assume this issue will continue for the foreseeable future, until the PHP 5.4 error reporting issues are dealt with in ZC 1.5.2 and 1.6.0? Or will patch code will be available for ZC 1.5.1?
Re: PHP 5.4 warnings: Illegal string offset
I did all of the code changes listed on this post, as well as the one in my previous post, and so far, so good.
I would really like to know when 1.6.0, or 1.5.2 will be released though.