3

我制作的脚本是。

<?php

$source_file = 'http://www.domain.tld/directory/img.png'; 
$dest_file = '/home/user/public_html/directory/directory/img.png'; 

copy($source_file, $dest_file);

?>

每次脚本运行时,我都需要不删除和重新上传该图像。我希望它是 img1.png、img2.png、img3.png 等。或者 img(Date,Time).png、img(Date,Time).png 等。这可能吗?如果可以,如何我要这样做吗?

4

4 回答 4

7

如果您担心覆盖文件,则可以添加时间戳以确保唯一性:

$dest_file = '/home/user/public_html/directory/directory/img.png';

// /home/user/public_html/directory/directory/img1354386279.png
$dest_file = preg_replace("/\.[^\.]{3,4}$/i", time() . "$0", $dest_file);

如果您想要更简单的数字,您可以采取稍微多一点的任务路线并更改目标文件名,只要具有该名称的文件已经存在:

$file = "http://i.imgur.com/Z92wU.png";
$dest = "nine-guy.png";

while (file_exists($dest)) {
    $dest = preg_replace_callback("/(\d+)?(\.[^\.]+)$/", function ($m) {
        return ($m[1] + 1) . $m[2];
    }, $dest);
}

copy($file, $dest);

匿名函数回调可能需要使用更高版本的 PHP;我用 5.3.10 进行了测试,一切正常。

于 2012-12-01T18:25:00.550 回答
0
<?php

$source_file = 'http://www.domain.tld/directory/img.png'; 
$dest_file = '/home/user/public_html/directory/directory/img.png'; 
if(!is_file($dest_file)){
copy($source_file, $dest_file);
}
else{
$fname = end(explode('/',$dest_file));
$fname = time().'-'.$fname;
$dest_file = dirname($dest_file).'/'.$fname;
copy($source_file,$dest_file);
}
?>

使用此代码这将在文件名之前添加时间

于 2012-12-01T17:38:08.477 回答
0

您可以使用重命名()。

例如:

rename ("/var/www/files/file.txt", "/var/www/sites/file1.txt");

或者 您也可以使用复制

$source_file = 'http://www.domain.tld/directory/img.png'; 
$dest_file = '/home/user/public_html/directory/directory/img.png'; 
if(!is_file($dest_file)){
copy($source_file, $dest_file);
}

或者如果你想增加时间,你可以试试这样。

 $source="http://www.domain.tld/directory/";
 $destn ="/home/user/public_html/directory/directory/";
 $filename="image.png";
 $ex_name = explode('.',$filename));
 $newname = $ex_name[0].'-'.time().$ex_name[1]; //where $ex_name[0] is filename and $ex_name[1] is extension.

 copy($source.filename,$destn.$newname );
于 2012-12-01T17:40:47.820 回答
0
$source_file = 'http://www.domain.tld/directory/img.png'; 
$dest_file = '/home/user/public_html/directory/directory/img'.uniqid().'.png'; 
copy($source_file, $dest_file);

uniquid 为您提供一个唯一的 ID,它很少可能被覆盖......

我也会为每个月制作文件夹或与图像的 id 相关

mkdir(ceil($imgId / 1000), 0777);
于 2012-12-01T17:46:39.300 回答