Solved

PHP Script

Posted on 2014-09-15
23
425 Views
Last Modified: 2014-09-19
On a CENT OS box 7:

I have a script that when I run from the SSH works perfects...but running from a browser or cron does not work. I get the following error:

When i run my php page in Browser getting the following error ::

Warning: fopen(property.csv): failed to open stream: Permission denied in /var/www/html/*****/download.php on line 44

Unable to create property.csv ..


I run the same page in SSH :: Using Following command

php /var/www/html/*****/download.php

It run perfectly .. and created csv file.. But not working when i run this page in browser or cron
0
Comment
Question by:Starquest321
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 11
  • 5
  • 3
  • +3
23 Comments
 
LVL 11

Assisted Solution

by:Radek Baranowski
Radek Baranowski earned 228 total points
ID: 40322988
I guess the reason must be different users running  this php code in both cases.

you must be running your apache/php server as a user who has no permission to write file to /var/www/html/***** directory

check what user runs apache/php (ps -ef | grep httpd) then compare to the user you run shell command as.

compare them users to see what permissions you are lacking. also, there might be some default php settings enforcing some particular limitations in writing foiles to disk.
0
 
LVL 6

Assisted Solution

by:Sir Learnalot
Sir Learnalot earned 91 total points
ID: 40322990
Did you check the permissions of the file? Run ls -l in the directory of the files to see the permissions. Set them correctly if needed with chmod xxx filename where xxx is a numerical value for Read, Write, and Execute.
0
 
LVL 7

Assisted Solution

by:Vimal DM
Vimal DM earned 46 total points
ID: 40323016
Hi,

There are two things you need to look at,

1) Running from browser

htaccess might have been added to this website, which might be blocking the "download.php" direct access from the browse.

2) Running from CRON

Permission needs to be given for the folder or file.
0
Back Up Your Microsoft Windows Server®

Back up all your Microsoft Windows Server – on-premises, in remote locations, in private and hybrid clouds. Your entire Windows Server will be backed up in one easy step with patented, block-level disk imaging. We achieve RTOs (recovery time objectives) as low as 15 seconds.

 

Author Comment

by:Starquest321
ID: 40323435
vimalmaria:
(1) What command steps in detail can I take to check for option 1.
(2) I have given the folder and file ALL permissions. So how is that possible?
0
 
LVL 6

Expert Comment

by:Sir Learnalot
ID: 40323444
if all permissions are desired enter chmod filename/folder -R 777

where chmod is command to set permissions
filename/folder is desired object to set permissions on
-R sets permissions recursively (on all child objects / sub folders and files)
777 = permissions full read, write, and execute for current user, all users, and admin users
0
 

Author Comment

by:Starquest321
ID: 40323446
Radek Baranowski: I ran the user and this is the result I get:
ps -ef | grep httpd
root      1073     1  0 Sep13 ?        00:00:12 /usr/sbin/httpd -DFOREGROUND
apache   11236  1073  0 03:22 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   11256  1073  0 03:22 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   11257  1073  0 03:22 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   11258  1073  0 03:22 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   11259  1073  0 03:22 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   11272  1073  0 03:27 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   11274  1073  0 03:27 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   11275  1073  0 03:27 ?        00:00:01 /usr/sbin/httpd -DFOREGROUND
apache   11276  1073  0 03:27 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   11464  1073  0 03:58 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   11465  1073  0 03:58 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
root     12813 12782  0 12:11 pts/0    00:00:00 grep --color=auto httpd

In the folder. . . this is the permissions:
folder:
drwxrwxrwx. 2 root root   4096 Sep 15 03:58 rets

In the file:
-rwxrwxrwx. 1 root root  3412 Sep 15 04:33 download.php
0
 

Author Comment

by:Starquest321
ID: 40323583
The simply issue: When I run the page in putty its runnign perfect. But in browser giving this error:

Warning: fopen(property_res.csv): failed to open stream: Permission denied in /var/www/html/application/download.php on line 44

I have given all permissions to folder rets .. still no luck...
0
 

Author Comment

by:Starquest321
ID: 40323586
09 * * * * root /var/www/html/applicationrets/download.php

Tried a full path as well.
0
 
LVL 11

Assisted Solution

by:Radek Baranowski
Radek Baranowski earned 228 total points
ID: 40323642
are you using 'w' flag for writing in fopen ?

$output = fopen('php://output', 'w');
0
 

Author Comment

by:Starquest321
ID: 40323665
Yes . .using W+.
It will be an empty file and we will start writing to that file.  If the file does not exist it will create.
0
 
LVL 83

Assisted Solution

by:Dave Baldwin
Dave Baldwin earned 90 total points
ID: 40323741
It is simply that when you are using SSH, you are logged in under your own user and have permissions to do what you want in your own directories.  When you are running thru Apache, the Apache user is Intentionally limited to what it can do.  This is to prevent malicious people from hacking into your site.
0
 

Author Comment

by:Starquest321
ID: 40323755
even if I give user:: group as root I still have the same issue. Coult it be that first issue with htaccess?
0
 
LVL 53

Assisted Solution

by:COBOLdinosaur
COBOLdinosaur earned 45 total points
ID: 40323965
I expect Dave is write, but maybe we are looking at the wrong thing.  It might be the references in the script are what is causing the problem.  You have not posted the script and if the code is the source of the program, then all the time being spent guessing and speculating is wasted if there is something simple that can be solved by looking at the code.

Cd&
0
 

Author Comment

by:Starquest321
ID: 40324019
The only logical question I have: Why would it work from SSH? That does not make sense. If the script is broken . . how will it allow itself to run from anywhere. . .
0
 
LVL 83

Assisted Solution

by:Dave Baldwin
Dave Baldwin earned 90 total points
ID: 40324051
There is no reason to think that the script is broken.  You're not understanding Linux permissions.  SSH requires a user login and anything you run while connected thru SSH runs with the permissions of that user.  Apache runs as it's own very limited user and does not have permissions outside of the web directories.  Setting the 'group' to root has no effect on those permissions.  The 'normal' solution is to use 'su_exec' which allows PHP to run under the permissions of the current user but that is normally used when you are running sites in '/home/user/public_html/'.  I don't know if it works in /var/www/html/ .
0
 
LVL 6

Assisted Solution

by:Sir Learnalot
Sir Learnalot earned 91 total points
ID: 40324052
I believe Dave is correct.
0
 

Author Comment

by:Starquest321
ID: 40324074
I also don't believe the script is broken. It works fine. Right now I can make the owner :: group - root or apache....just stuck here. What to do?

Script works perfect when logged in as root and using SSH
0
 
LVL 11

Assisted Solution

by:Radek Baranowski
Radek Baranowski earned 228 total points
ID: 40324095
post it here, then we could say something more.
0
 

Author Comment

by:Starquest321
ID: 40324129
The trouble area:


            echo "+ {$resource}:{$class}<br>\n";

        $file_name = strtolower("{$resource}_{$class}.csv");
        $fh = fopen($file_name, "w+");


        $maxrows = true;
        $offset = 1;
        $limit = 50;
        $fields_order = array();
                        
            $i=1;
0
 

Author Comment

by:Starquest321
ID: 40324131
Warning: fopen(property.csv): failed to open stream: Permission denied in /var/www/html/application/rets/download.php on line 44
Array
0
 
LVL 11

Assisted Solution

by:Radek Baranowski
Radek Baranowski earned 228 total points
ID: 40324150
well not much more known..

one thing: we have all focused on the directory /var/www/html/application/rets/, although it's only the place of residence of download.php script.

but where does it try to create the file ? where the file is created when you run it from shell ? I suppose that when you run it with shell/php then file gets created in the directory you run the command from

this probably - most certainly - is not the case when you run it via browser. would it be php temp dir ? or any of these two:

; The root of the PHP pages, used only if nonempty.
; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root
; if you are running php as a CGI under any web server (other than IIS)
; see documentation for security issues.  The alternate is to use the
; cgi.force_redirect configuration below
; http://php.net/doc-root
doc_root =

; The directory under which PHP opens the script using /~username used only
; if nonempty.
; http://php.net/user-dir
user_dir =
0
 

Author Comment

by:Starquest321
ID: 40324787
Are these settings under php.ini?
0
 
LVL 11

Accepted Solution

by:
Radek Baranowski earned 228 total points
ID: 40324796
yes
0

Featured Post

Portable, direct connect server access

The ATEN CV211 connects a laptop directly to any server allowing you instant access to perform data maintenance and local operations, for quick troubleshooting, updating, service and repair.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

You ever wonder how to backup Linux system files just like Windows System Restore?  Well you can use Timeshift in Linux to perform those similar action.  This tutorial will show you how to backup your system files and keep regular intervals. Note…
The purpose of this article is to fix the unknown display problem in Linux Mint operating system. After installing the OS if you see Display monitor is not recognized then we can install "MESA" utilities to fix this problem or we can install additio…
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…

738 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question