Onaysız hataları armut yüklerken

4 Cevap php

Ben yerleşik PHP 5.3 yükleme kullanarak, OS X üzerinde PEAR yüklemeye çalışıyorum. Ben yaptım:

curl http://pear.php.net/go-pear > go-pear.php
php go-pear.php

Bazı istemleri yanıtladıktan sonra, ben bu gibi hataları ton başlar:

Deprecated: Assigning the return value of new by reference is deprecated in /Users/username/bin/pear/temp/PEAR.php on line 563
PHP Deprecated:  Assigning the return value of new by reference is deprecated in /Users/username/bin/pear/temp/PEAR.php on line 566

Şimdi, ben bu hataları demek istediğimi anlamak. Ben sadece bunları gizlemek istiyorum. Yani benim /private/etc/php.ini dosyasında, ben şu var:

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED

Bu benim kendi kodunda bu aynı hataları gizler. Ancak PEAR o değil. Onlar error_reporting seviyesini değiştirmek gibi görünüyor.

Bunu düzeltmek için iyi bir yolu var mı?

4 Cevap

@ Kguest

Ben yapılandırma listesindeki "php_ini" bulamadı.

@ JW

I solved the problem by changing the behavior of PEAR command line's internal error handler: in file /usr/share/pear/pearcmd.php, at the bottom of the file, change the error_handler's body to :

if ($errno & error_reporting()) {
     $errortype = array (
        E_ERROR   =>  "Error",
        E_WARNING   =>  "Warning",
        E_PARSE   =>  "Parsing Error",
        E_NOTICE   =>  "Notice",
        E_CORE_ERROR  =>  "Core Error",
        E_CORE_WARNING  =>  "Core Warning",
        E_COMPILE_ERROR  =>  "Compile Error",
        E_COMPILE_WARNING =>  "Compile Warning",
        E_USER_ERROR =>  "User Error",
        E_USER_WARNING =>  "User Warning",
        E_USER_NOTICE =>  "User Notice"
    );
    $prefix = $errortype[$errno];
    global $_PEAR_PHPDIR;
    if (stristr($file, $_PEAR_PHPDIR)) {
        $file = substr($file, strlen($_PEAR_PHPDIR) + 1);
    } else {
        $file = basename($file);
    }
    print "\n$prefix: $errmsg in $file on line $line\n";
}

This will make PEAR command compatible with your php.ini error reporting level. (do the same with peclcmd.php)

Bu arada, bu fonksiyon ile boş bir yapılandırma tanımlayıcısı okumak için kullanılan

$GLOBALS['config']->get('verbose') < 4

Yani PEAR config ayrıntılı düzeyini değiştirmek için çalıştı ama hiçbir şey (ulaştığımızda henüz bu çizgi ölümcül bir hata yükseltmek) yapar.

Ben bu bileşen oluştururken PEAR bakıcılarına aklında ne vardı bilmiyorum ama en azından hatalarını gizlemek için bir yol sağlayabilir.

Sorun PEAR PHP 5.3 ile uyumlu değildir ve PHP 5.3 altında çalıştırmayı denediğinizde çalışır ancak amortisman uyarıları bir sürü almak olduğunu.

Kötü şeyler yapmak için, PEAR komut satırı aracının davranışı PHP, daha sonra ne olursa olsun "display_errors" INI ayarı, hatta "report_errors" ayarı ayarı hataları karşılaştığında, tüm hataları yakaladı ve standart çıktıya görüntülenen olduğunu (ve ile fazladan boş çizgiler çizme, bu yüzden) sinir bozucu ekstra olacak.

Orada bu sorunu gidermek için çeşitli yollar vardır, ama hepsi sizin doğrudan makinenin üzerinde PEAR'ın kodunu düzenleme içerir. yaptım sonunda ne o PEAR yükler dosyası 'pearcmd.php' düzenlemek, ve (error_handler fonksiyonunda) sonunda print "..." komutunu değiştirmek olduğunu {[(2) ]} (... kodunda doğru metin için nerede durduğunu). Bu yerine standart çıktı standart hata akımına çıkış olmak için tüm hata iletilerini neden olur - bu ilk etapta yapılmalıydı gibi, ve armut susturmak için komutları sonra sen sadece 2>/dev/null ekleyebilir Onları görmek istemiyorsanız hata mesajları.

Bu bir armut yapılandırma ayarı değiştirmeniz gerekir gibi geliyveya bana:

$pear config-set php_ini /private/etc/php.ini 

Bu aracılığıyla ayarlanır onaylamak

$pear config-get php_ini

veya

$pear config-show

Ne yazık ki PEAR paketlerinin sürdürücüler bazen gerçekten (sahte olarak çözüldü ben karşılaşmadım a similar problem,) hataları bu tür umurumda değil. Yani bu hataları yakında sabit olan saymak olmaz.

Benim çözüm gerçek (ölümcül) hataları göstermek sadece php.ini içinde error_reporting değerini ayarlamak için, ve kendi uygulama bu değeri ayarlamak için olduğunu. Iyi davranış için, tabii ki ilk yapmalıdır. Böyle bir şey:

<?php
  // include required PEAR classes
  require_once('PEAR.php');

  class Application() {

      public static main() {
          // get $errlevel value from some sort of configuration
          error_reporting($errlevel);
      }

  }

  $myApp = Application::main();

?>