Re: PHP Warning: strlen() expects parameter 1 to be string
Quote:
Originally Posted by
dbltoe
Any suggestions of other things we might check would be GREATLY appreciated.
From a diagnostics perspective, you could try to capture information about whatever the offending component is by inserting this line at line 152:
Code:
if (is_array($value)) trigger_error('GET param found to be array: ' . print_r($value, true) . ' --- contents of GET: ' . print_r($_GET, true));
Depending on your PHP configuration, that should dump the offending details into the myDebug-xxxxx.log logs, as per https://www.zen-cart.com/tutorials/index.php?article=82
DO NOT TRY THIS IF YOU ARE USING A VERSION OLDER THAN v1.3.9a !!!!!!!!!
Re: PHP Warning: strlen() expects parameter 1 to be string
I got a debug file with this identical error today.
First error ever on the live shop.
Order confirmed at 15:19:58 (using 4b payment module, Spain)
Debug Warning at 15:20:24
ZC 1.39h
PHP Version: 5.3.8 (Zend: 2.3.0)
PHP Safe Mode: Off
PHP Memory Limit: 128M
Database: MySQL 5.0.92-community-log
HTTP Server: Apache
Main mods, IH2, Ceon Advanced Shipper, 4b payment module...a long list.
I've put in the suggested debug code.
Re: PHP Warning: strlen() expects parameter 1 to be string
Ok, I got two of these today.
1)
Order at 10:53:12
Debug at 10:54:01
Payment - Moneyorder
Shipping - Advanced Shipper
Quote:
[06-Oct-2011 10:54:01] PHP Notice: GET param found to be array: Array
(
[0] => 47
)
--- contents of GET: Array
(
[main_page] => index
[action] => notify
[notify] => Array
(
[0] => 47
)
)
in /whatever/includes/functions/functions_general.php on line 152
[06-Oct-2011 10:54:01] PHP Warning: strlen() expects parameter 1 to be string, array given in /whatever/includes/functions/functions_general.php on line 153
2)
Order at 11:48:57
Debug at 11:49:25
Payment - 4b (offsite credit card gateway)
Shipping - Advanced Shipper
Quote:
[06-Oct-2011 11:49:25] PHP Notice: GET param found to be array: Array
(
[0] => 56
)
--- contents of GET: Array
(
[main_page] => index
[action] => notify
[notify] => Array
(
[0] => 56
)
)
in /whatever/includes/functions/functions_general.php on line 152
[06-Oct-2011 11:49:25] PHP Warning: strlen() expects parameter 1 to be string, array given in /whatever/includes/functions/functions_general.php on line 153
I don't find anything I can relate to those numbers 47 and 56 in the order.
So, any more clues I can give you?
Thanks
Steve
Re: PHP Warning: strlen() expects parameter 1 to be string
Why are you passing a [notify] in your $_GET in the first place? What addon is doing that, and why?
Re: PHP Warning: strlen() expects parameter 1 to be string
Quote:
Why are you passing a [notify] in your $_GET in the first place?
No idea. Nothing I have actually coded myself.
I've done some searching and the only references I can find to notify and get would be in the shopping cart class, for example:
zen_redirect(zen_href_link($_GET['main_page'], zen_get_all_get_params(array('action', 'notify', 'main_page'))));
but this is a stock file and I don't really understand what I'm looking at or for.
Can you suggest more that I can add to the debug info to help locate this? Or a construct I could search for in the code?
Re: PHP Warning: strlen() expects parameter 1 to be string
Quote:
Originally Posted by
dbltoe
Still rearing it's ugly head from time to time but have not aggressively pursued it as I can't seem to find anything that dies because of it.:dontgetit
Are you actually able to determine anything that is not working due to this error?
It's only a "PHP Warning", so is not causing any script executions to fail.
Thus, it's a minor issue.
Indeed, thanks to some of torvista's debug data, I've found the cause, and it's an extremely minor issue.
Quote:
Originally Posted by
dbltoe
Several of our sites are getting:
PHP Warning: strlen() expects parameter 1 to be string, array given in /home/site_name/public_html/includes/functions/functions_general.php on line 152
Commonalities are ... all debug files to the cache directory are timestamped at the conclusion of an order.
...
AND, only occasionally does any site throw this error. One site has 25+ orders this month with a mixture of PayPal and AIM. Only two orders (one for each) has thrown the error.
It only occurs at the conclusion of an order because it's specifically triggered only when the user is presented with a list of product-notification choices and they click the submit button on that page to update those choices. (It might also trigger on the account_notifications page if they were to visit there.)
The warning is harmless, and can be safely ignored.
If it's keeping you awake at night, you could move the in_array() condition check to the beginning of the list, by changing the line from
Code:
if ( (strlen($value) > 0) && ($key != 'main_page') && ($key != zen_session_name()) && ($key != 'error') && (!in_array($key, $exclude_array)) && ($key != 'x') && ($key != 'y') ) {
to
Code:
if ( (!in_array($key, $exclude_array)) && (strlen($value) > 0) && ($key != 'main_page') && ($key != zen_session_name()) && ($key != 'error') && ($key != 'x') && ($key != 'y') ) {
Re: PHP Warning: strlen() expects parameter 1 to be string
Quote:
If it's keeping you awake at night,
Absolutely!
Thanks for the solution.
Re: PHP Warning: strlen() expects parameter 1 to be string
just got a new debug using modified code as above:
Quote:
[17-Oct-2011 09:39:27] PHP Notice: GET param found to be array: Array
(
[0] => 280
)
--- contents of GET: Array
(
[main_page] => index
[action] => notify
[notify] => Array
(
[0] => 280
)
)
in blah..blah/includes/functions/functions_general.php on line 152
Re: PHP Warning: strlen() expects parameter 1 to be string
Hi
Did you apply the modification suggested by DrByte?
I did and I no longer have the error, if you check the new beta version 1.5 this modif is applied in the file functions_general.php.
:huh:
Re: PHP Warning: strlen() expects parameter 1 to be string
Quote:
Did you apply the modification suggested by DrByte?
Quote:
just got a new debug using modified code as above:
yes, I am using the modified code.