Link to home
Start Free TrialLog in
Avatar of ktwdallas
ktwdallas

asked on

FTP in PHP generating failed to open stream: Permission denied


I have a working script on an existing web server Linux (FC7) that I'm now moving to a brand new sever just installed with FC10 and Apache.

The script attempts an FTP connect to copy files locally but is failing with a "failed to open stream: Permission denied".

All the directories have 777 permissions. Safe_mode is off via PHP_info. Since this a brand new install, I'm assuming something is set by default that I have to change (I've had to change a couple of things with setsebool so far to allow remote MySQL connections, etc, so maybe there's another switch affecting FTP that I'm unaware of.)


Log:
[Tue May 12 12:08:27 2009] [error] [client 192.168.55.41] TrafficCop2 for MPG
[Tue May 12 12:08:28 2009] [error] [client 192.168.55.41] PHP Warning:  ftp_get(/home/cer/mpg/3/current/2376.mpg) [<a href='function.ftp-get'>function.ftp-get</a>]: failed to open stream: Permission denied in /home/cer/public_html/ctrl/ScriptTrafficCop2.php on line 140
[Tue May 12 12:08:28 2009] [error] [client 192.168.55.41] PHP Warning:  ftp_get() [<a href='function.ftp-get'>function.ftp-get</a>]: Error opening /home/cer/mpg/3/current/2376.mpg in /home/cer/public_html/ctrl/ScriptTrafficCop2.php on line 140
 
php_info
safe_mode	Off	Off
safe_mode_exec_dir	no value	no value
safe_mode_gid	Off	Off
safe_mode_include_dir	no value	no value
 
 
Script:
error_log("TrafficCop2 for MPG");
 
$ftp_user_name = "me"; // Username
$ftp_user_pass = "mypassword";   // Password
$conn_id=ftp_connect("192.168.55.41");
 
//loginwithusernameandpassword
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
 
 
//checkconnection
if((!$conn_id)||(!$login_result)){
	growl('FTP connection failed on ScriptTrafficCop.php');
	die("FTP connection has failed!");
}
 
ftp_chdir($conn_id, "/Volumes/Storage/Channel Finished MOVs/listings/quicktime files/mpg");
 
	
$local_file  = "/home/cer/mpg/3/current/".$property['propertyid'].".mpg";
$server_file="/Volumes/Storage/Channel Finished MOVs/listings/quicktime files/mpg/".$property['propertyid'].".mpg";
if (file_exists($local_file)) unlink($local_file);
if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY))
  growl($property['propertyid'].' mpg current copied');
else
  die($property['propertyid']." failed");

Open in new window

Avatar of crash36936
crash36936

I can't find any problem with the code.  Have you tried doing the FTP transfer manually?  Can you try it as the httpd/php user?
Avatar of ktwdallas

ASKER

If I ssh in as the cer user (the owner of the folder I'm trying to use), I can ftp to the machine and grab the file. I'm not sure I know how to start an ftp session as the apache or php user.
Well, If you have root access, you can `su <apache user>` (will likely need root password) and then try the same ftp command.  Apache (httpd) on linux often runs as `nobody` or `www`.  The username should be set in httpd.conf.

I'm sorry, this is a bit of trial an error.  Maybe someone else will have a more inspired idea.
ASKER CERTIFIED SOLUTION
Avatar of ktwdallas
ktwdallas

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial