2012-06-11 67 views
1

我做了一個腳本,它必須從ftp-server加載一個文件然後解析它。代碼依賴臨時名來存儲臨時存儲的ftp文件。在我的研究與開發的服務器(使用PHP 5.3.10),這完美的作品,但在客戶機(使用PHP 5.2.17),它不是做,給我:tempnam()不能在客戶端服務器上工作

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

能有人給我一個線索我可以做? (我對PHP的possibiities有點弱)

我用這個代碼:

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);  
}; 
+0

您是否有權寫入指定的目錄? –

+0

這個錯誤在我看來像系統生成的,與你的'tmpname'無關。在內部,FTP將文件存儲在自己的臨時文件中臨時文件名中的標準臨時目錄中,直至下載完成 - 然後將其移至您指定的位置。 –

回答

2

我發現了這個問題。由於我的主機不喜歡/ tmp目錄(誰會責怪他們) 我需要先設置 putenv('TMPDIR =/tmp-dir我的提供者給了我'); 然後與tempname一起工作

+0

雖然這個問題比較老,你能否將你的答案標記爲「正確答案」,這樣就可以關閉這個問題了?謝謝! – SaschaM78

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」。

+0

非常感謝。 嘗試yor代碼並得到 臨時目錄:/ tmp臨時目錄不可寫 因此,看來我必須聯繫我的虛擬主機管理員? – zantafio

+0

它解決了你的問題嗎? –

+0

嗯,我現在知道我不能寫入temp-dir。 我想我需要另一種方式來寫我的ftp數據。 – zantafio

相關問題