2016-01-23 39 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