У меня есть статический метод в вспомогательном классе Utility :: error_log(), который помогает нам изящно отлаживать HUGE-объекты в PHP. Метод, и это помощник-метод Полезность :: ToArray() приведены ниже:Print_r() в PHP error_log() не работает. (непечатаемые символы)
static function error_log($message, $data=null, $max=2)
{
if(is_array($data) || is_object($data))
$data = print_r(self::toArray($data, $max),true);
if(is_array($message) || is_object($message))
$message = print_r(self::toArray($message, $max),true);
if(!empty($data))
$data = "\n".$data;
if (!strstr($message, PHP_EOL))
$message = str_pad(" ".$message." ", 50,'=',STR_PAD_BOTH);
error_log($message.$data);
}
static function toArray($object, $max = 2, $current = 0)
{
if($current > $max)
return ucfirst(gettype($object)).'(...)';
$current++;
$return = array();
foreach((array) $object as $key => $data)
if (is_object($data))
$return[$key] = self::toArray($data, $max, $current);
elseif (is_array($data))
$return[$key] = self::toArray($data, $max, $current);
else
$return[$key] = $data;
return $return;
}
Теперь, может быть немного, чтобы смотреть, но суть в том, ToArray делает махина (много рекурсии) заказов меньшей величины и возвращает все свойства в виде массивов или строк. Намного проще работать с ... Идея состоит в том, что print_r($array,true)
затем делает массив строкой, и мы заносим ее в журнал.
Это не работает должным образом. Результат:
[05-Apr-2013 05:29:00] ==================================== PERSISTING SUITS & SHIRTS ===================================
Array
(
[
А потом ничего, где, когда я звоню print_r($data)
и печати в браузере, я получаю:
Array
(
[BRS\PageBundle\Entity\Pageroot_folder_name] => Pages
[id] => 43
[title] => Suits & Shirts
[depth_title] => Suits & Shirts
[description] => (... AND SO ON ...)
Перед тем, как сказать, что это error_log() ограничение длины, я буду отметить, что я могу успешно $data = var_export($data,true)
и отправить результат в error_log() без проблем:
[05-Apr-2013 06:00:08] ==================================== PERSISTING SUITS & SHIRTS ===================================
array (
'' . "\0" . 'BRS\\PageBundle\\Entity\\Page' . "\0" . 'root_folder_name' => 'Pages',
'id' => 43,
'title' => 'Suits & Shirts',
'depth_title' => 'Suits & Shirts',
'description' => (... AND SO ON ...)
в чем проблема? Почему он работает с var_export($data,true)
и print_r($data,false)
, но не с print_r($data,true)
??