Nasıl (PHPA € ™ s getTraceAsString tam dize alabilirsiniz)?

3 Cevap php

Ben bir yığın izleme almak için getTraceAsString() kullanıyorum ama dize nedense kesildi ediliyor.

Örnek, bir özel durum ve ben kullanarak dize günlük olduğunu:

catch (SoapFault $e) {
error_log( $e->getTraceAsString() )
}

Dize thats yazdırır:

# 0 C: \ Somedirectory \ Somedirectory \ Somedirectory \ somedir \ SomeScript.php (10): SoapClient-> SoapClient ('http://www.ex ...');

Nasıl tam dize yazdırmak için alabilirim?

3 Cevap

Ben hiçbir kesik dizeleri ile bir yığın izlemesi dönmek için bu işlevi oluşturuldu:

function getExceptionTraceAsString($exception) {
    $rtn = "";
    $count = 0;
    foreach ($exception->getTrace() as $frame) {
        $args = "";
        if (isset($frame['args'])) {
            $args = array();
            foreach ($frame['args'] as $arg) {
                if (is_string($arg)) {
                    $args[] = "'" . $arg . "'";
                } elseif (is_array($arg)) {
                    $args[] = "Array";
                } elseif (is_null($arg)) {
                    $args[] = 'NULL';
                } elseif (is_bool($arg)) {
                    $args[] = ($arg) ? "true" : "false";
                } elseif (is_object($arg)) {
                    $args[] = get_class($arg);
                } elseif (is_resource($arg)) {
                    $args[] = get_resource_type($arg);
                } else {
                    $args[] = $arg;
                }   
            }   
            $args = join(", ", $args);
        }
        $rtn .= sprintf( "#%s %s(%s): %s(%s)\n",
                                 $count,
                                 $frame['file'],
                                 $frame['line'],
                                 $frame['function'],
                                 $args );
        $count++;
    }
    return $rtn;
}

Bu çıkışı kesiliyor nerede Alternatif olarak, php kaynağını düzenleme olabilir: http://svn.php.net/viewvc/php/php-src/tags/php_5_3_3/Zend/zend_exceptions.c?annotate=301440#l344

Bazı daha iyi bir sürümü http://stackoverflow.com/a/6076667/194508 burada https://gist.github.com/1437966 çıkışına sınıf eklenir.

Php.ini ayarı log_errors_max_len yardım değişiyor olacak?

Ayrıca, mesajlar çıkışı sırasında sadece kesiliyor lütfen unutmayın, hala $ istisna-> getMessage çağrısı ile özgün hata mesajı alıyorum () olabilir