Hi this is my first post.
I have two webservers. I can run php code fine on one but not the
other. Both webservers can read files only one can write. I have looked
around at other posts and they point at not giving permissions to the
apache user.
I have chmod 777 the directory /var/www/html
and the subdirectory test
and all the files within test
[root@www test]# ls -la
total 36
drwxrwxrwx 2 root root 4096 May 17 15:45 .
drwxrwxrwx 17 root root 4096 May 16 12:57 ..
-rwxrwxrwx 1 root root 0 May 17 09:54 counter.dat
-rwxrwxrwx 1 root root 527 May 17 09:53 counter.php
-rwxrwxrwx 1 root root 35 May 17 15:00 whoami.php
[root@www test]#
If I run any of the following scripts from the command line however
they work fine. When I "su" to a normal user "su gary" they still work.
But when i run them from the webserver they fail.
script whoami.php
-----------------
<?php echo exec('whoami')."\n"; ?>
command line result
-------------------
[root@www test]# su gary
[gary@www test]$ /usr/bin/php -q whoami.php
gary
[gary@www test]$
webserver result
----------------
server 1 = nothing
server 2 = "apache"
script counter.php
-------------------
[root@www test]# cat counter.php
<?
if(file_exists("/var/www/html/test/counter.dat"))
{
$exist_file = fopen("/var/www/html/test/counter.dat", "r");
$new_count = fgets($exist_file, 255);
$new_count++;
fclose($exist_file);
print("$new_count people have visited this page");
$exist_count = fopen("/var/www/html/test/counter.dat", "w");
fputs($exist_count, $new_count);
fclose($exist_count);
}
else
{
$new_file = fopen("/var/www/html/test/counter.dat", "w");
fputs($new_file, "1");
print("1 person has visited this page");
fclose($new_file);
}
?>
When I run it from the command line its fine
[root@www test]# rm counter.dat
rm: remove regular empty file `counter.dat'? y
[root@www test]# /usr/bin/php -q counter.php
1 person has visited this page
[root@www test]# /usr/bin/php -q counter.php
2 people have visited this page
[root@www test]# /usr/bin/php -q counter.php
3 people have visited this page
[root@www test]# /usr/bin/php -q counter.php
4 people have visited this page
[root@www test]#
when I su to non root user its fine
[root@www test]# rm counter.dat
rm: remove regular file `counter.dat'? y
[root@www test]# su gary
[gary@www test]$ /usr/bin/php -q counter.php
1 person has visited this page
[gary@www test]$ /usr/bin/php -q counter.php
2 people have visited this page
[gary@www test]$ /usr/bin/php -q counter.php
3 people have visited this page
[gary@www test]$ /usr/bin/php -q counter.php
4 people have visited this page
[gary@www test]$ exit
exit
but when I run it from the webserver It does not increase the counter
it cant open the file for reading here's the error log.
[client 10.0.0.6] PHP Warning: fopen(/var/www/html/test/counter.dat):
failed to open stream: Permission denied in
/var/www/html/test/counter.php on line 9
[client 10.0.0.6] PHP Warning: fputs(): supplied argument is not a
valid stream resource in /var/www/html/test/counter.php on line 10
[client 10.0.0.6] PHP Warning: fclose(): supplied argument is not a
valid stream resource in /var/www/html/test/counter.php on line 11
I have changed the user within httpd.conf from apache to www. I created
user www by "useradd www" but this did not fix it. I could run command
line php fine as user www but not from webserver.
I have looked at teh httpd.conf for bother servers and they look very
similar phpinfo() also is very similar.
I installed xampp on my windows xp machine and scripts work fine from
webserver.
The problem server is HTTP Server: Apache/2.0.52 (Fedora) PHP Version:
4.3.9 (Zend: 1.3.0)
please help!