1

私はスクリプトを作成しました。これは、ftp サーバーからファイルをロードして解析する必要があります。コードは tempname に依存して、ftp ファイルを一時的に保存します。私の開発サーバー(php 5.3.10を使用)では、これは問題なく機能しますが、クライアントマシン(php 5.2.17を使用)では機能せず、次のようになります。

Warning: ftp_rawlist() [function.ftp-rawlist]: Unable to create temporary file. Check permissions in temporary files directory.

誰かが私に何ができるかを教えてもらえますか? (私はphpの可能性に少し弱いです)

私はこのコードを使用しました:

define ("LOCALFILE",tempnam('/tmp', 'data-'));
define ("USER","myusername");
define ("PASS","mypassword");
define('SERVER', "ftpserver.com");
define ("DIR","/path/");

function getFTPFile(){

    // connect
    if(!($conn_id = @ftp_connect(SERVER))){
        Error::throwOne("Could not connect to ".SERVER);

    };
    // login 
    if(!($login_result = @ftp_login($conn_id, USER, PASS))){
        Error::throwOne("LOGIN INCORRECT! user:".USER." pass:".PASS);
    };
    // try to change the directory to somedir
    if (!ftp_chdir($conn_id, DIR)) {
        Error::throwOne("Couldn't change directory\n");
    }; 

    if(!($a = ftp_rawlist($conn_id, '-1t'))){
        Error::throwOne("Couldn't get ftp_rawlist\n");
    };

    $server_file=($a[0]);
    if (!ftp_get($conn_id, LOCALFILE, $server_file, FTP_BINARY)) {
        Error::throwOne("Couldn't get file\n");
    };
    ftp_close($conn_id);    
};
4

3 に答える 3

3

エラーはシステムによって生成されたように見え、tmpnameとは何の関係もありません。内部的には、FTPは、ファイルをダウンロードした時点まで、標準の一時ディレクトリの一時ファイル名にある独自の一時ファイルに保存します。その後、指定した場所に移動します。

ダウンロードコードの前にこのコードを配置してみてください。

$tmpdir = sys_get_temp_dir();
echo "Temp dir: $tmpdir\n";
echo  is_writable($tmpdir) ? "Temp dir is writable" : "Temp dir is not writable";

これにより、システムの一時ディレクトリに書き込む権限があるかどうかがわかります。$tmpdirさらに、コードで「/tmp」をハードコーディングする代わりに、この変数を使用することをお勧めします。

于 2012-06-11T06:22:06.030 に答える
2

問題が見つかりました。私のホスティング業者は /tmp ディレクトリが気に入らないので (誰が彼らを責めるでしょう)、最初に putenv('TMPDIR=/プロバイダーがくれた tmp-dir'); を設定する必要があります。その後、tempnameで動作します

于 2012-06-11T19:49:39.303 に答える