我没有PHP和我的经验,使用:
error_log("big array:" . print_r($bigArray, true));
查看一个大数组中的内容,但看起来输出被截断,然后才能得到输出中的有趣内容:
...
[4] => Array
(
[id] => 100039235
[start] => 11:00
[end] => 19:00
[punches] => Array
(
[0] => Array
(
[id] => 6319
[comment] =>
这是预期的吗?还有其他方法或解决方法可以让更多的阵列退出吗?
答案 0 :(得分:17)
如果您选中error INI options in PHP,则会注意到log_errors_max_len
选项:
以字节为单位设置
log_errors
的最大长度。在error_log
中添加了有关源的信息。 默认值为1024,0允许不应用任何最大长度。此长度适用于记录的错误,显示的错误以及$php_errormsg
。使用整数时,以字节为单位测量值。也可以使用本FAQ中描述的速记符号。
因此,如果您想使用error_log
输出这些大邮件,请务必将log_errors_max_len
更改为较大的数字(或0
无限长)。
// Append to the start of your script
ini_set('log_errors_max_len', 0);
答案 1 :(得分:3)
这个答案有点过时了。
即使error_log
设置为0(对于无限制输出),来自log_errors_max_len
的输出仍将被截断。
根据the PHP documentation for log_errors_max_len:
此长度适用于记录的错误,显示的错误以及
$php_errormsg
,但不适用于显式调用的功能,例如error_log()
。
获取error_log()
语句以真正输出大量信息的唯一方法是指定自定义日志文件。
error_log("big array:" . print_r($bigArray, true), 3, '/path/to/custom.log');
第二个参数(3)表示根据the error_log documentation的消息类型(外部日志)。
答案 2 :(得分:2)
由于scrowler提到它的error_log限制了输出。
默认情况下,error_log将在您的代码中记录到syslog,其长度受运行时设置log_errors_max_len的限制,默认为1024.
有关这些功能和设置的详细信息,请参阅以下内容 -
http://php.net/manual/en/function.error-log.php http://php.net/manual/en/errorfunc.configuration.php#ini.log-errors-max-len
您可能想要做的只是调用print_r($ bigArray)直接输出,或者如果您想在浏览器中看到更有趣的东西
echo '<pre>' . print_r ($bigArray, TRUE) . '</pre>';
答案 3 :(得分:0)
如果数组中的字符串包含空字符(值为零的字节),则该点的输出也将被截断。来自https://secure.php.net/manual/en/function.error-log.php#refsect1-function.error-log-notes:
警告
error_log()
不是二进制安全的。message
将被空字符截断。
要解决此问题,您可以使用str_replace
消除空字符:
error_log("big array:" . str_replace("\0", '\\0', print_r($bigArray, true)));
答案 4 :(得分:0)
您可以通过多次调用error_log
来击败系统,因为字符限制似乎仅适用于单个调用:
function multiline_error_log($val) {
$lines = preg_split("/[\r]?[\n]/", print_r($val, 1));
foreach ($lines as $line) error_log($line);
}
只要print_r
的输出的单个文本行均不超过字符数限制,此方法将起作用。请注意,如果您担心空字符问题,可能值得将Jake的答案纳入如何定义multiline_error_log
中。