Project-Pier / ProjectPier-Core

ProjectPier is a Free, Open-Source, PHP application for managing tasks, projects and teams through an intuitive web interface.
http://www.projectpier.org
GNU Affero General Public License v3.0
37 stars 16 forks source link

Bug in DataManager Class - Array to string Conversion #12

Open mdkaleel opened 9 years ago

mdkaleel commented 9 years ago

Hi

Facing some issue in DataManger Class "Array to string Conversion" Issue, Please help

Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 252 (error code: 8) 
#2 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 342 (error code: 8) 
#3 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 390 (error code: 8) 
#4 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 396 (error code: 8) 
#5 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 252 (error code: 8) 
#6 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 342 (error code: 8) 
#7 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 390 (error code: 8) 
#8 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 396 (error code: 8) 
#9 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 252 (error code: 8) 
#10 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 342 (error code: 8) 
#11 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 390 (error code: 8) 
#12 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 396 (error code: 8) 
#13 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 252 (error code: 8) 
#14 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 342 (error code: 8) 
#15 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 390 (error code: 8) 
#16 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 396 (error code: 8) 
#17 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 252 (error code: 8) 
#18 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 342 (error code: 8) 
#19 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 390 (error code: 8) 
#20 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 396 (error code: 8) 
#21 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 252 (error code: 8) 
#22 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 342 (error code: 8) 
#23 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 390 (error code: 8) 
#24 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 396 (error code: 8) 
Time since start: 0.29687285423279 seconds 
JonDeG commented 9 years ago

What version of the application are you using and what version of PHP are you using?

mdkaleel commented 9 years ago

@JonDeG PHP Version :5.4.14 ProjectPier Version : 0.8.8.sp2

mdkaleel commented 9 years ago

TraceLog

E:\PPNew\environment\classes\dataaccess\DataManager.class.php:findOne()
E:\PPNew\environment\classes\dataaccess\DataManager.class.php:find():begin
E:\PPNew\environment\classes\dataaccess\DataManager.class.php:find():SELECT * FROM `pp088_config_options` WHERE `name` = 'theme'  
E:\PPNew\environment\classes\dataaccess\DataManager.class.php:find():found 1
E:\PPNew\environment\classes\dataaccess\DataManager.class.php:loadFromRow(row):begin
E:\PPNew\environment\classes\dataaccess\DataManager.class.php:isReady() = class_exists ConfigOption
E:\PPNew\environment\classes\controller\PageController.class.php:tpl_fetch(E:/PPNew/application/views/administration/browse_log.php)
E:\PPNew\application\helpers\company_website.php:administration_tabbed_navigation
E:\PPNew\application\models\PluginManager.class.php:call_user_func_array(times_add_administration_tab,..
E:\PPNew\environment\classes\controller\PageController.class.php:renderLayout(E:/PPNew/application/layouts/administration.php <xmp><div class="advancedPagination">
<a href="/index.php?c=administration&amp;a=browse_log&amp;active_project=2&amp;1421037759&amp;trace&amp;pos=0&amp;dir=">First page</a>
<a href="/index.php?c=administration&amp;a=browse_log&amp;active_project=2&amp;1421037759&amp;trace&amp;pos=3217576&amp;dir=up">Previous page</a>
 Page: 3221672 <a href="/index.php?c=administration&amp;a=browse_log&amp;active_project=2&amp;1421037759&amp;trace&amp;pos=3221672&amp;dir=">Next page</a>
<a href="/index.php?c=administration&amp;a=browse_log&amp;active_project=2&amp;1421037759&amp;trace&amp;pos=-1&amp;dir=up">Last page</a></div>
------------------------------------------------------------------
<br>Session "default" started at 2015-01-11T09:19:02+0000
<br>#1 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 252 (error code: 8)
<br>#2 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 342 (error code: 8)
<br>#3 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 390 (error code: 8)
<br>#4 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 396 (error code: 8)
<br>Time since start: 0.26563096046448 seconds
<br>-------------------------------------------------------------------------------
<br>Session "default" started at 2015-01-11T09:21:40+0000
<br>#1 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 252 (error code: 8)
<br>#2 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 342 (error code: 8)
<br>#3 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 390 (error code: 8)
<br>#4 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 396 (error code: 8)
<br>Time since start: 0.28125691413879 seconds
<br>-------------------------------------------------------------------------------
<br>Session "default" started at 2015-01-11T09:21:46+0000
<br>#1 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 252 (error code: 8)
<br>#2 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 342 (error code: 8)
<br>#3 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 390 (error code: 8)
<br>#4 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 396 (error code: 8)
<br>Time since start: 0.26563191413879 seconds
<br>-------------------------------------------------------------------------------
<br>Session "default" started at 2015-01-12T04:42:28+0000
<br>#1 ERROR: Error: Array to string conversion in 'E:\PPNew\application\controllers\AccessController.class.php' on line 133 (error code: 8)
<br>Time since start: 0.40625500679016 seconds
<br>-------------------------------------------------------------------------------
<br>Session "default" started at 2015-01-12T04:42:29+0000
<br>#1 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 252 (error code: 8)
<br>#2 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 342 (error code: 8)
<br>#3 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 390 (error code: 8)
<br>#4 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 396 (error code: 8)
<br>Time since start: 2.296905040741 seconds
<br>-------------------------------------------------------------------------------
<br>Session "default" started at 2015-01-12T04:42:35+0000
<br>#1 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 252 (error code: 8)
<br>#2 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 342 (error code: 8)
<br>#3 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 390 (error code: 8)
<br>#4 ERROR: Error: Array to string conversion in 'E:\PPNew\environment\classes\dataaccess\DataManager.class.php' on line 396 (error code: 8)
<br>Time since start: 0.46875309944153 seconds
<br>-------------------------------------------------------------------------------
<br></xmp>)
E:\PPNew\environment\classes\dataaccess\DataManager.class.php:findOne()
E:\PPNew\environment\classes\dataaccess\DataManager.class.php:find():begin
E:\PPNew\environment\classes\dataaccess\DataManager.class.php:find():SELECT * FROM `pp088_config_options` WHERE `name` = 'site_name'  
E:\PPNew\environment\classes\dataaccess\DataManager.class.php:find():found 1
E:\PPNew\environment\classes\dataaccess\DataManager.class.php:loadFromRow(row):begin
E:\PPNew\environment\classes\dataaccess\DataManager.class.php:isReady() = class_exists ConfigOption
E:\PPNew\environment\classes\dataaccess\DataManager.class.php:findOne()
E:\PPNew\environment\classes\dataaccess\DataManager.class.php:find():begin
E:\PPNew\environment\classes\dataaccess\DataManager.class.php:find():SELECT * FROM `pp088_config_options` WHERE `name` = 'theme'  
E:\PPNew\environment\classes\dataaccess\DataManager.class.php:find():found 1
E:\PPNew\environment\classes\dataaccess\DataManager.class.php:loadFromRow(row):begin
E:\PPNew\environment\classes\dataaccess\DataManager.class.php:isReady() = class_exists ConfigOption
E:\PPNew\environment\classes\dataaccess\DataManager.class.php:findOne()
E:\PPNew\environment\classes\dataaccess\DataManager.class.php:find():begin
Engelbert commented 9 years ago

Does it work if you enable or disable TRACE @ login? The only constant I can find in the error is the :

__TRACE__ 
JonDeG commented 9 years ago

Looks like a PHP 5.4+ change that is not backward compatible:

http://php.net/manual/en/migration54.incompatible.php

specifically:

"Converting an array to a string will now generate an E_NOTICE level error, but the result of the cast will still be the string "Array"."

I can confirm I have duplicated this on PHP 5.5. This error is logged in the PP system log, but I don't think it's affecting the functionality as it appears to be related to trace logging only.

Obviously we need to dig around and find the source. I suspect the variable $id is an array and is the source of the issue. Just a gut feeling at this point.

GLHowell commented 9 years ago

FIX

I fixed this bug by replacing the double quotes with single quotes in the problem Trace statements in Project-Pier/environment/classes/dataaccess/DataManager.class.php

For example here is the modified version of function findById:

function findById($id, $force_reload = false) {
  trace(__FILE__,'findById($id, $force_reload)');
...

The trace strings that contain variable names with $ signs require modification.

Engelbert commented 9 years ago

Hi @GLHowell , Thanks for your fix mate. As soon as somebody has the time to test and confirm this, you're welcome to make a pull request if you'd like.

JonDeG commented 9 years ago

@GLHowell I still get the errors even after making the suggested change. Can you confirm this? When verifying, please directly evaluate the contents of log.php instead of relying on the log browser within the application. Thanks.

GLHowell commented 9 years ago

I inspect log.php directly. I delete it and have it regenerated before tests.

Turns out, I found two additional files with the problematic trace calls.

Perhaps the reported errors you are seeing are from these files? Change the strings with $ in the trace calls in these file as well. There may be other files, that my app hasn't hit yet.

If you are still seeing errors from DataManager, recheck your fixes.