ID:               48576
 Comment by:       sjoerd-php at linuxonly dot nl
 Reported By:      yolcoyama at gmail dot com
 Status:           Open
 Bug Type:         Filesystem function related
 Operating System: Linux ubo 2.6.28-11-generic
 PHP Version:      5.2.9
 New Comment:

Thank you for your bug report.

On my system, crontab returns 1, as shown by these commands:
crontab -l -u USER; echo $?

This thus means that PHP returns the correct exit status. Instead, the
system() system call behaves strangely. You can show this by compiling a
program which returns 1 in its main loop and call that program using
system(). It will return 256 as return status. Python documents this
somewhat better than the C++ system call:

[It will] return a tuple containing its pid and exit status indication:
a 16-bit number, whose low byte is the signal number that killed the
process, and whose high byte is the exit status (if the signal number is
zero); the high bit of the low byte is set if a core file was produced.


Previous Comments:
------------------------------------------------------------------------

[2009-06-17 06:35:23] yolcoyama at gmail dot com

Description:
------------
Trying to install crontab with PHP cli, system (and passthru) function
returned error-code of "1" with output "no crontab for USER" (USER
should be replaced with real system user to whom crontab should be
installed).

the code is:
$ php -r '$c="crontab -u USER -l";system($c,$status); printf("%s
(%d)\n",$c,$status);'

the output is:
no crontab for USER
crontab -u USER -l (1)

Since no crontab is been installed for the USER, the output was
expected, but I don't think error code should be 1 for this.

For comparison, python and c++ both returns 256 of error code for this
error ("no crontab for USER be installed").

According to an error code definition of unix system (in ubuntu,
/usr/include/asm-generic/errno-base.h and errno.h), 1 be translated as
"permission denied".

Followings are comparison code and result for other languages.
They returned error number 256 but PHP.

* c++
#include <iostream>
#include <cstdlib>
using namespace std;

int main(int argc,char *argv[]){
        string cmnd("crontab -u USER -l");
        int errcode=system(cmnd.data());
        printf(
                "%s (%d)\n",
                cmnd.data(),
                errcode
        );
        return 0;
}

r...@server2:~/diary# ./a.out
no crontab for USER
crontab -u USER -l (256)

* python
r...@server2:~/diary# python -c 'import os; c="crontab -u USER -l";
print "%s (%d)" % (c, os.system(c))'
no crontab for USER
crontab -u USER -l (256)

* php
r...@server2:~/diary# php -r '$c="crontab -u USER
-l";system($c,$status); printf("%s (%d)\n",$c,$status);'
no crontab for USER
crontab -u USER -l (1)

* error number refference
r...@server2:~/diary# awk '/[\x20\t]+1[\x20\t]+/'
/usr/include/asm-generic/errno-base.h
#define EPERM            1      // Operation not permitted



Reproduce code:
---------------
# make sure there's NO crontab installed for USER.

$ php -r '$c="crontab -u USER -l";system($c,$status); printf("%s
(%d)\n",$c,$status);'


Expected result:
----------------
Output:
no crontab for USER
crontab -u USER -l (256)

Actual result:
--------------
Output:
no crontab for USER
crontab -u USER -l (1)


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=48576&edit=1

Reply via email to