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");
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?
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.
I'm sorry, this is a bit of trial an error. Maybe someone else will have a more inspired idea.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.