2016-01-23 42 views
0

臨時路徑我有兩個功能(僞碼)圖片資源標識符發送到服務器上的

function UploadImage($FilePath) { 

    $image = imagecreatefromjpeg($FilePath); 

    // do some work on $image like resize, compress, etc 

    $NewImage = imagecreatetruecolor($x, $y); 
    imagecopyresampled($NewImage, $image, ...); 

    //$NewImage now holds an image resource identifier (IRI) object. 
    //SaveFile($NewImageToFilePathSomehow); 
} 

function SaveFile($FilePath) { 

    // perform some other checks and do some stuff 

    rename($FilePath, $NewPath); 
} 

我顯而易見的選擇是使用imagejpeg手動創建在服務器上的文件的副本,通過路徑SaveFile上然後再次手動刪除該文件。我想知道是否有一種方法可以創建像tmpfile這樣的臨時文件,並允許並傳遞路徑。

SaveFile是一個廣義函數,它也被用於其他地方,因此它只是邏輯屬性類型是路徑而不是文件句柄(如fopened文件流)。

回答

0

你可以使用tempnam生成一個臨時文件名,並傳遞到imagejpegfilepath,還可以使用它作爲filepathSaveFile

要確保在tmp目錄中創建文件,請在tempnam中使用sys_get_temp_dir()作爲dir

+0

但會有任何問題,因爲'SaveFile'會將這個臨時文件移動到一個新的位置?如果php決定刪除腳本執行完成時的臨時文件,就像使用'tmpfile'文件一樣。我認爲最好是在任何地方用'imagejpeg'創建普通文件,然後將路徑傳遞給'SaveFile',因爲它無論如何都會被移動。 – Achshar

+0

據我可以從文檔中知道,'tempnam'不會刪除創建的文件,它只會創建具有唯一文件名的文件。如果文件是在'tmp'目錄下創建的,它們可能被PHP刪除。因此,如果'SaveFile'重命名文件名並將文件路徑擴展名爲除tmp目錄以外的任何內容,則不會被刪除。 – mani

+0

很酷,是的文檔沒有提及刪除。我認爲跳過tempnam會更快,更清潔。我會直接從'imagejpeg'創建文件並移動它。如果'imagejpeg'一旦創建文件就會覆蓋文件,那麼創建文件就沒有意義了。 – Achshar