Neden Bu PHP Komut Satırı Script Bu Segmentasyon Hata alabilirim?

8 Cevap php

Ben bir 'akıl günlük dosyası' dediğimiz bir mesaj için sadece hızlı bir senaryo. Sadece ben dalarken benim düşüncelerimi takip ve işe kendimi geri almak için. Her neyse, bu çoğu zaman iyi çalışıyor, ama her öylesine sık sık bir segment hataya olsun. C onlardan duydum, ama PHP önce onları hiç. İşte senaryo:

#!/usr/bin/php 
<?php 

    $mental_log_file = "/home/ali/mental-log"; 
    array_shift($argv);      //get rid of the initial arg (name of the command) 
    $log_entry = date('j-n-y H:i') . ' ' . implode(' ', $argv) . "\n";

    file_put_contents($mental_log_file, $log_entry, FILE_APPEND);

Burada birkaç ishal olsun ne:

ali@oem-desktop:~$ mlog blah
ali@oem-desktop:~$ mlog blah
Segmentation fault
ali@oem-desktop:~$ mlog blah
ali@oem-desktop:~$ mlog blah
Segmentation fault
ali@oem-desktop:~$ mlog blah
ali@oem-desktop:~$ mlog blah
ali@oem-desktop:~$ mlog blah
Segmentation fault
ali@oem-desktop:~$ mlog blah
ali@oem-desktop:~$ mlog blah
Segmentation fault
ali@oem-desktop:~$ mlog blah
Segmentation fault

Ben burada yanlış yapıyor olabilir ne herhangi bir fikir? Dosya bile segmentasyon hataları üretmek çalışır beklendiği gibi doğru güncelleme gibi görünüyor. Ben Ubuntu 9.04 şen koşuyorum.

ali@oem-desktop:~$ php --version
PHP 5.2.6-3ubuntu4.1 with Suhosin-Patch 0.9.6.2 (cli) (built: Apr 23 2009 14:37:14) 
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies

Şimdiden teşekkürler.

8 Cevap

Denemek

strace mlog blah

o öldüğünde ne yapıyor gibi bazı ipuçları verir ve eğer görmek. Bu değer ne için, ben şen bildirmek aynı php yapı ile yüklemek bir 64 bit olduğunu yeniden olamazdı.

Bu şekilde işler karışıyor bir uzantısı olması çok olasıdır. Uzantısı php veya harici bir kütüphaneye farklı bir sürümü için inşa edilmiş ise bu olabilir. Php.ini tüm uzantıları devre dışı bırakmayı deneyin ve sorunu çözüp çözmediğini görmek. Öyle Eğer suçlu bulana kadar, sonra, bir defada her eklentiyi yeniden etkinleştirin.

Php5-mysql in Ubuntu bug #343870 gibi görünüyor. PHP mysql ve mysqli devre modülleri ile daha fazla bir segment hataya alamadım.

Çünkü Ubuntu ve Debian hem de ... https://bugs.launchpad.net/ubuntu/+source/php5/+bug/343870 etkileyen bu hata muhtemelen

Ben aynı şeyleri gördüm, ve bu sadece bir PHP hata göstergesi genellikle bulunuyor.

I would upgrade to the latest version, if the problem persists.. file a bug report. If you are stuck to ubuntu versions, you might be able to post a bug report in ubuntu's tracker instead.

Uzatma yükleme sırasını değiştirmeyi deneyin. Ben sahip bir segfault kurtulmak için kıvrılma önce pgSQL taşımak zorunda kaldı. Ben bu okuduktan sonra denedim:

http://linux.m2osw.com/php_cli_segmentation_fault_with_pgsql

Yapamaz şaşırtıcı, çoğaltmak. Deneysel olarak, ben fopen() yerine file_put_contents() kullanarak dosyaya ekleme denemek istiyorum.

Ben nedeniyle basit bir yığın taşması için bu hata var. Ben bir segmentasyon hatası iyi bir soru daha başka bir hata olsun, ama strace ve die() kullanarak vermedi Neden sorunu aşağı izlenebilmektedir.

Server

Debian 6.0 (sıkma)

Linux domain.com 2.6.32-5-amd64 # 1 SMP Sun 23 Eylül 10:07:46 UTC 2012 x86_64 GNU / Linux

PHP

(Dahili: 6 Ağustos 2012 14:18:06) Suhosin-Patch ile PHP 5.3.3-7 + squeeze14 (cli)

Copyright (c) 1997-2009 PHP Grubu

Zend Motoru v2.3.0, Copyright (c) 1998-2010 Zend Technologies

Suhosin v0.9.32.1 ile, Copyright (c) 2007-2010, SektionEins GmbH tarafından

Code to reproduce problem

<?php   
    function Bar() {
        return Bar();
    }
    Bar();
?>

Output

php5 overflowtest.php

Segmentasyon hatası

Strace output (in case anyone can use it for anything):

PASTEBIN LINK