views:

1222

answers:

7

It's just a quick script to a message to what I call a 'mental log file'. Just to keep track of my thoughts when I drift off and get myself back to work. Anyway, it works alright most of the time, but every so often I get a segmentation fault. Heard of them in C, but never had them before in PHP. Here's the script:

#!/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);

Here's what I get on a few runs:

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

Any idea of what I could be doing wrong here? The file seems to be updating correctly as expected even on the runs that produce segmentation faults. I'm running Ubuntu 9.04 Jaunty.

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

Thanks in advance.

+3  A: 

Try

strace mlog blah

and see if that gives some clues as what it is doing when it dies. For what it's worth, I couldn't reproduce that on a 64 bit Jaunty install with the same php build you report.

Paul Dixon
Thanks for that! Tried running it but I'm not so clued up on system calls/low level programming, couldn't really make sense of the output.
Ali
Paste an strace of a typical crash into pastebin.com and add a link to it in your question
Paul Dixon
Also, troelskn is probably onto something - what extensions have you got enabled?
Paul Dixon
A: 

deleted this attempt at an answer to clear confusion. as @paul pointed out, its wrong wrong wrong:-(

David Archer
Context is the fourth parameter, and he has stated he's using 5.2.6 anyway, which would support it.
Paul Dixon
A: 

Unable to replicate, unsurprisingly. Experimentally, I'd try appending to the file using fopen() instead of file_put_contents().

chaos
+3  A: 

It's very likely that you have an extension which somehow messes up. That can happen if the extension was built for a different version of php or of an external library. Try to disable all extensions in php.ini and see if it solves the problem. If it does, then re-enable each extension, one at a time, until you find the offender.

troelskn
+1  A: 

I've seen the exact same things, and it's usually just in indicator of a PHP bug.

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.

Evert
A: 

Looks like Ubuntu bug #343870 in php5-mysql. I don't get a segmentation fault any more with PHP mysql and mysqli modules disabled.

lushin
+1  A: 

It's probably because of this bug which affects both Ubuntu and Debian... https://bugs.launchpad.net/ubuntu/+source/php5/+bug/343870

Fuzzy76