ftp_get() - OpenVMS - semicolon in filenames

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I am trying to use the php ftp_* functions to access files on an OpenVMS UCX
FTP server.  I can log in and list the files, but I can't use ftp_get() to
get any of them.  Instead I get a 'file not found' back from ftp_get().

I think the problem is in OpenVMS naming conventions.  OpenVMS saves files
with a semicolon and a version number appended to the end.  So instead of
overwriting files, it increments the version number.  In my case, I have
directory with ~100 files, all with the same name and different version
numbers.  For instance:
 
FILENAME.EXT;1
FILENAME.EXT;2
{...}
FILENAME.EXT;100

...so my first suspicion is that ftp_get() doesn't understand what to do
with the semicolon.

STFW turns up a bug in PHP where garbage is appended to ASCII type transfers
from OpenVMS, but I don't think that is relevant to this problem.  I will
likely have to deal with this if I can get the file to transfer, but one
step at the time.

If I use 'get' in a command line FTP client from the LAMP box I'm developing
this on, I just specify the version number as part of the filename as you
would expect.

I have tried escaping the semicolon with a backslash.  ftp_get() returns a
"Warning: ftp_get: File specification syntax error" message.

This is my first foray into the ftp_* functionality of PHP.  Hopefully,
someone here will have had to deal with this already, and will have an
answer.   Here is the code I have so far, for what its worth:

<?php
// This is a 'one use' utility on a private server, no need to sanitize
$filename=$_POST['filename'];

// Debugging 
$filename=preg_replace('/;/','\;',$filename);
echo $filename;

$local_file='/tmp/'.$filename;
$ftp_server='host';
$ftp_username='username';
$ftp_userpass='password';

// set up basic connection
$conn_id = ftp_connect($ftp_server);

// login with username and password
$login_result = ftp_login($conn_id, $ftp_username, $ftp_userpass);

// check connection
if ((!$conn_id) || (!$login_result)) {
        echo "FTP connection has failed!";
        echo "Attempted to connect to $ftp_server for user $ftp_user_name";
        exit;
    }

// try to download
if (ftp_get($conn_id, $local_file, $filename, FTP_ASCII)) {
    echo "Successfully written to $local_file\n";
} else {
    echo "There was a problem\n";
}

ftp_close($conn_id);
?>

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux