PDA

Просмотр полной версии : Переименование дубликата


Vinsik
12.01.2009, 21:39
вот возник опять вопрос, например файл 1.mp3 есть на шаре. Кто то пытаеца залить 1.mp3 =) шара перезапишет файл :( а содержание то может различатся! :( Как сделать чтобы шара переименовывала дубликаты?
Например переименовала этот файл в 1(copy).mp3
<?
include("include/common.php");

if($loggedin){
include("include/accmenu.php");
}
if( $_POST['submit'] && $_FILES['attached']['name'] ){
$ok_filetypes = explode("|",$att_filetypes);
if (!$_FILES['attached']['error'] && $_FILES['attached']['size'] > $att_max_size*1024){
errform('<CENTER>Извините, слишком большой размер файла!</CENTER><BR><BR>'); // #err
$step = 1;
}
$filename = (!$_FILES['attached']['error'] ? substr( basename($_FILES['attached']['name']), -30 ) : '');
$x = strtolower( substr($_FILES['attached']['name'], -3));
if($filename && !in_array($x, $ok_filetypes) ){
errform('<CENTER>Не поддерживаемый тип файла!!!</CENTER><BR><BR>');
$step = 1;
}
if(!$posterr){
if(!isset($_GET["ipaddress"]) || ($_GET["ipaddress"] == "")) {
$ipaddress = $_SERVER['REMOTE_ADDR'];
$local = 1;
} else {
$ipaddress = $_GET["ipaddress"];
$local = 0;
}


$ru=array("а","б","в"," ","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я");
$tr=array("a","b","v","_","g","d","e","oh","zh","z","i","j","k","l","m","n","o","p","r","s","t","u","f","x","c","ch","sh","w","qh","y","q","eh","ju","ja");
$uniq = strtolower(str_replace($ru,$tr,$_FILES['attached']['name']));

move_uploaded_file($_FILES['attached']['tmp_name'], $att_path."/".$uniq.".".$ext );
$strQuery = "INSERT INTO images25 SET ";
$strQuery .= "filename='($uniq)',";
if($myuid){
$strQuery .= "user='{$myuid}',";
}
$strQuery .= "status='1'";
$result = mysql_query($strQuery) or die( mysql_error() );
$aid = mysql_insert_id();
if($aid){
$filen = $siteurl."/".str_replace('./', '', $att_path)."/".$uniq."";
$filen = str_replace('http://','%%',$filen);
$filen = str_replace('//','/',$filen);
$filen = str_replace('%%','http://',$filen);


//ITS AN IMAGE
if($x=="jpg" or $x=="jpeg" or $x=="gif" or $x=="png" or $x=="jif" or $x=="jfif")
{
$filenx=$filen;
}
else
{
include("include/const.inc.php");
$filenx = $siteurl."/icons/".$Icons[$ext];
}


$step = 2;
}else{
$step = 1;
}
}
}else{
$step = 1;
}
if($step == 1){

?>

Kaimi
12.01.2009, 22:01
Проверяй наличие используя скажем file_exists и добавляй к имени файла префикс или присваивай файлам имя самостоятельно, а в бд храни оригинальные названия

Vinsik
13.01.2009, 11:23
Проверяй наличие используя скажем file_exists и добавляй к имени файла префикс или присваивай файлам имя самостоятельно, а в бд храни оригинальные названия
а хотяб пример кода можно?

groundhog
13.01.2009, 11:59
Обрати внимание на хак в виде кода:

if (file_exists($att_path."/".$uniq.".".$ext)) $uniq = $uniq . '(copy)';

<?
include("include/common.php");

if($loggedin){
include("include/accmenu.php");
}
if( $_POST['submit'] && $_FILES['attached']['name'] ){
$ok_filetypes = explode("|",$att_filetypes);
if (!$_FILES['attached']['error'] && $_FILES['attached']['size'] > $att_max_size*1024){
errform('<CENTER>Извините, слишком большой размер файла!</CENTER><BR><BR>'); // #err
$step = 1;
}
$filename = (!$_FILES['attached']['error'] ? substr( basename($_FILES['attached']['name']), -30 ) : '');
$x = strtolower( substr($_FILES['attached']['name'], -3));
if($filename && !in_array($x, $ok_filetypes) ){
errform('<CENTER>Не поддерживаемый тип файла!!!</CENTER><BR><BR>');
$step = 1;
}
if(!$posterr){
if(!isset($_GET["ipaddress"]) || ($_GET["ipaddress"] == "")) {
$ipaddress = $_SERVER['REMOTE_ADDR'];
$local = 1;
} else {
$ipaddress = $_GET["ipaddress"];
$local = 0;
}


$ru=array("а","б","в"," ","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я");
$tr=array("a","b","v","_","g","d","e","oh","zh","z","i","j","k","l","m","n","o","p","r","s","t","u","f","x","c","ch","sh","w","qh","y","q","eh","ju","ja");
$uniq = strtolower(str_replace($ru,$tr,$_FILES['attached']['name']));
if (file_exists($att_path."/".$uniq.".".$ext)) $uniq = $uniq . '(copy)';
move_uploaded_file($_FILES['attached']['tmp_name'], $att_path."/".$uniq.".".$ext );
$strQuery = "INSERT INTO images25 SET ";
$strQuery .= "filename='($uniq)',";
if($myuid){
$strQuery .= "user='{$myuid}',";
}
$strQuery .= "status='1'";
$result = mysql_query($strQuery) or die( mysql_error() );
$aid = mysql_insert_id();
if($aid){
$filen = $siteurl."/".str_replace('./', '', $att_path)."/".$uniq."";
$filen = str_replace('http://','%%',$filen);
$filen = str_replace('//','/',$filen);
$filen = str_replace('%%','http://',$filen);


//ITS AN IMAGE
if($x=="jpg" or $x=="jpeg" or $x=="gif" or $x=="png" or $x=="jif" or $x=="jfif")
{
$filenx=$filen;
}
else
{
include("include/const.inc.php");
$filenx = $siteurl."/icons/".$Icons[$ext];
}


$step = 2;
}else{
$step = 1;
}
}
}else{
$step = 1;
}
if($step == 1){

?>

Vinsik
13.01.2009, 12:49
спасибо! держи заслуженый + только вот как сделать чтобы строка
if (file_exists($att_path."/".$uniq.".".$ext)) $uniq = $uniq . '(copy)';
Переименовывала не в j._timberlake_-_rock_your_body.mp3(copy) а в j._timberlake_-_rock_your_body(copy).mp3

Joker-jar
13.01.2009, 13:22
А мое мнение что файлы нужно хранить изначально под уникальными именами, а уже при загрузке из базы тянуть его реальное имя

Kaimi
13.01.2009, 13:22
Навскидку
$uniq = preg_replace('/\.mp3/', '(copy).mp3', $uniq);

Vinsik
13.01.2009, 13:25
А мое мнение что файлы нужно хранить изначально под уникальными именами, а уже при загрузке из базы тянуть его реальное имя
согласен, так в этом коде и было изначально. только при загрузке тоже было кривое имя) И мне не удобно смареть выкладывали этот файл на форум или нет. И удалять лишнее.

Vinsik
13.01.2009, 13:30
Навскидку
$uniq = preg_replace('/\.mp3/', '(copy).mp3', $uniq);
так любому файлу приписка (copy) ставится

groundhog
13.01.2009, 13:32
Извини, не видел что скрипт кривой и не формирует расширение файла. Хак в строчках:

$attach_name = substr($_FILES['attached']['name'], 0, strrpos($_FILES['attached']['name'], '.') - 1);
$uniq = strtolower(str_replace($ru,$tr,$attach_name));
$ext = substr($_FILES['attached']['name'], strrpos($_FILES['attached']['name'], '.') + 1);
if (file_exists($att_path."/".$uniq.".".$ext)) $uniq = $uniq . '(copy)';
<?
include("include/common.php");

if($loggedin){
include("include/accmenu.php");
}
if( $_POST['submit'] && $_FILES['attached']['name'] ){
$ok_filetypes = explode("|",$att_filetypes);
if (!$_FILES['attached']['error'] && $_FILES['attached']['size'] > $att_max_size*1024){
errform('<CENTER>Извините, слишком большой размер файла!</CENTER><BR><BR>'); // #err
$step = 1;
}
$filename = (!$_FILES['attached']['error'] ? substr( basename($_FILES['attached']['name']), -30 ) : '');
$x = strtolower( substr($_FILES['attached']['name'], -3));
if($filename && !in_array($x, $ok_filetypes) ){
errform('<CENTER>Не поддерживаемый тип файла!!!</CENTER><BR><BR>');
$step = 1;
}
if(!$posterr){
if(!isset($_GET["ipaddress"]) || ($_GET["ipaddress"] == "")) {
$ipaddress = $_SERVER['REMOTE_ADDR'];
$local = 1;
} else {
$ipaddress = $_GET["ipaddress"];
$local = 0;
}


$ru=array("а","б","в"," ","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я");
$tr=array("a","b","v","_","g","d","e","oh","zh","z","i","j","k","l","m","n","o","p","r","s","t","u","f","x","c","ch","sh","w","qh","y","q","eh","ju","ja");
$attach_name = substr($_FILES['attached']['name'], 0, strrpos($_FILES['attached']['name'], '.') - 1);
$uniq = strtolower(str_replace($ru,$tr,$attach_name));
$ext = substr($_FILES['attached']['name'], strrpos($_FILES['attached']['name'], '.') + 1);

if (file_exists($att_path."/".$uniq.".".$ext)) $uniq = $uniq . '(copy)';
move_uploaded_file($_FILES['attached']['tmp_name'], $att_path."/".$uniq.".".$ext );

$strQuery = "INSERT INTO images25 SET ";
$strQuery .= "filename='($uniq)',";
if($myuid){
$strQuery .= "user='{$myuid}',";
}
$strQuery .= "status='1'";
$result = mysql_query($strQuery) or die( mysql_error() );
$aid = mysql_insert_id();
if($aid){
$filen = $siteurl."/".str_replace('./', '', $att_path)."/".$uniq."";
$filen = str_replace('http://','%%',$filen);
$filen = str_replace('//','/',$filen);
$filen = str_replace('%%','http://',$filen);


//ITS AN IMAGE
if($x=="jpg" or $x=="jpeg" or $x=="gif" or $x=="png" or $x=="jif" or $x=="jfif")
{
$filenx=$filen;
}
else
{
include("include/const.inc.php");
$filenx = $siteurl."/icons/".$Icons[$ext];
}


$step = 2;
}else{
$step = 1;
}
}
}else{
$step = 1;
}
if($step == 1){

?>

Vinsik
13.01.2009, 13:50
теперь после загрузки файла я я.mp3 он переименовался в ja_(copy).mp3 хоть и должен был переименоватся в ja_ja(copy).mp3 . И шара выдала ошибку
"Файл удачно загружен!

Unable to open ./uploads/ja_(copy) "
а вообще вот нормальный вид шары) http://uploaded.to/?id=tizq10

Kaimi
13.01.2009, 14:45
так любому файлу приписка (copy) ставится

Так ты перед реплейсом проверяй на уникальность

groundhog
13.01.2009, 14:51
В жизни не видел такого кривого скрипта... Кто его писал? Попробуй так...

<?
include("include/common.php");

if($loggedin){
include("include/accmenu.php");
}
if( $_POST['submit'] && $_FILES['attached']['name'] ){
$ok_filetypes = explode("|",$att_filetypes);
if (!$_FILES['attached']['error'] && $_FILES['attached']['size'] > $att_max_size*1024){
errform('<CENTER>Извините, слишком большой размер файла!</CENTER><BR><BR>'); // #err
$step = 1;
}
$filename = (!$_FILES['attached']['error'] ? substr( basename($_FILES['attached']['name']), -30 ) : '');
$x = strtolower( substr($_FILES['attached']['name'], -3));
if($filename && !in_array($x, $ok_filetypes) ){
errform('<CENTER>Не поддерживаемый тип файла!!!</CENTER><BR><BR>');
$step = 1;
}
if(!$posterr){
if(!isset($_GET["ipaddress"]) || ($_GET["ipaddress"] == "")) {
$ipaddress = $_SERVER['REMOTE_ADDR'];
$local = 1;
} else {
$ipaddress = $_GET["ipaddress"];
$local = 0;
}


$ru=array("а","б","в"," ","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я");
$tr=array("a","b","v","_","g","d","e","oh","zh","z","i","j","k","l","m","n","o","p","r","s","t","u","f","x","c","ch","sh","w","qh","y","q","eh","ju","ja");
$attach_name = substr($_FILES['attached']['name'], 0, strrpos($_FILES['attached']['name'], '.') - 1);
$uniq = strtolower(str_replace($ru,$tr,$attach_name));
$ext = substr($_FILES['attached']['name'], strrpos($_FILES['attached']['name'], '.') + 1);

if (file_exists($att_path."/".$uniq.".".$ext)) $uniq = $uniq . '(copy)';
move_uploaded_file($_FILES['attached']['tmp_name'], $att_path."/".$uniq.".".$ext );

$strQuery = "INSERT INTO images25 SET ";
$strQuery .= "filename='($uniq.$ext)',";
if($myuid){
$strQuery .= "user='{$myuid}',";
}
$strQuery .= "status='1'";
$result = mysql_query($strQuery) or die( mysql_error() );
$aid = mysql_insert_id();
if($aid){
$filen = $siteurl."/".str_replace('./', '', $att_path)."/".$uniq.".".$ext;
$filen = str_replace('http://','%%',$filen);
$filen = str_replace('//','/',$filen);
$filen = str_replace('%%','http://',$filen);


//ITS AN IMAGE
if($x=="jpg" or $x=="jpeg" or $x=="gif" or $x=="png" or $x=="jif" or $x=="jfif")
{
$filenx=$filen;
}
else
{
include("include/const.inc.php");
$filenx = $siteurl."/icons/".$Icons[$ext];
}


$step = 2;
}else{
$step = 1;
}
}
}else{
$step = 1;
}
if($step == 1){

?>

Vinsik
13.01.2009, 15:03
Файл удачно загружен!

Unable to open ./uploads/7-mc_zhan__dj_riga-0

Частично я, и весь Ачат.... =)))) Опять ошибка =(

groundhog
13.01.2009, 15:12
Слуш, дай доступы я тебе сделаю... Просто вслепую такой скрипт отлаживать трудно... Пиши в ПМ

Vinsik
13.01.2009, 15:41
Слуш, дай доступы я тебе сделаю... Просто вслепую такой скрипт отлаживать трудно... Пиши в ПМ
не получится.... все хранится на локальном сервере... во внеху выхода нет.

groundhog
13.01.2009, 15:44
заверни тогда скрипты + БД с которой он работает

Vinsik
13.01.2009, 18:37
заверни тогда скрипты + БД с которой он работает
окей, ток там все криво) Я не чистил ниче) Попозже прям сюда выложу) Это серовно уже достояние обществености.

groundhog
13.01.2009, 18:44
Ок, напиши только потом в ПМ, чтобы я знал :) А то за темой могу не уследить...

Vinsik
13.01.2009, 19:05
сразу говорю) Скрипт частично урезал и переписывал я из целого файлообменного движка) Поэтому оч много ненужных *.php файлов, мне некада их убирать.
http://depositfiles.com/files/7zsdpmku4

groundhog
13.01.2009, 22:01
Это исправленный index.php... Перетри им свой файл...

http://groundhog.ru/index.txt

Vinsik
14.01.2009, 10:31
Это исправленный index.php... Перетри им свой файл...

http://groundhog.ru/index.txt
Спасибо) Все работает.

Vinsik
14.01.2009, 10:37
Я не знаю как щас но в той версии которуя выложил Я файлы на шаре криво переименовывались, оставались русские буквы 13._зabytyj_polk_feat._lx_(тomsk)_-_вse_na_pol.mp3 это исправленно?

Vinsik
14.01.2009, 11:44
как сделать чтоб он нормально переименовывал а не вот так, 028_centr_-_гorod_дorog.mp3 вот код

$ru=array("а","б","в"," ","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я");
$tr=array("a","b","v","_","g","d","e","oh","zh","z","i","j","k","l","m","n","o","p","r","s","t","u","f","x","c","ch","sh","w","qh","y","q","eh","ju","ja");

$attach_name = substr($_FILES['attached']['name'], 0, strrpos($_FILES['attached']['name'], '.'));
$uniq = strtolower(str_replace($ru,$tr,$attach_name));

groundhog
14.01.2009, 12:31
В той версии, что я выложил всё корректно переименовывается... Например 028_центр_-_город_дорог.mp3 переименовался в 028_centr_-_gorod_dorog.mp3. Разве нет?

Vinsik
14.01.2009, 13:13
В той версии, что я выложил всё корректно переименовывается... Например 028_центр_-_город_дорог.mp3 переименовался в 028_centr_-_gorod_dorog.mp3. Разве нет?
Да но почему то скрипт не всегда обрабатывает файл до конца, как видиш.

Vinsik
14.01.2009, 13:29
ща почистил mysql мож в этом дело было...