Forum Webscript.Ru
Программирование => PHP => Тема начата: DJ Fat от 07 Февраля 2004, 00:38:29
-
Помогите пожалуйста модифицировать вот этот кусок скрипта. Программа закачивает файл, присваивает ему имя из файла composition.num (после каждой закачки число, которое хранится в этом файле увеличивается на единицу). Потом заносит информацию в БД. В общем, вам, программистам наверное виднее что и как:
$compositions_directory = "/home/ejayru90/public_html/mixgalaxy/fruityloops/download/loops/";
$counter_fname="composition.num";
//-->
$pafiledb_sql->connect($db);
$config = $pafiledb_sql->query($db,"SELECT * FROM $db[prefix]_settings",1);
if($submit) {
if($_FILES[\'userfile\'][\'type\']=="application/x-zip-compressed") {
if($_FILES[\'userfile\'][\'size\'] < 819200) {
if(is_uploaded_file($_FILES[\'userfile\'][\'tmp_name\'])) { // Если файл был загружен
$num=0;
if (file_exists($counter_fname)){ // Если файл существует
$f=fopen($counter_fname,"r");
$num=fread($f,filesize($counter_fname));
fclose($f);
}
$num++;
$fh=fopen($counter_fname,"w+");
fputs($fh,$num);
fflush($fh);
fclose($fh);
if (move_uploaded_file($_FILES[\'userfile\'][\'tmp_name\'], $compositions_directory.sprintf("c%04d.zip", $num))) {
echo "";
chmod($compositions_directory.sprintf("c%04d.zip", $num),0777);
$filesize = round (($_FILES[\'userfile\'][\'size\'] / 1024), 0);
$dlurl = "http://www.mixgalaxy.ru/fruityloops/download/loops/".sprintf("c%04d.zip", $num)."";
$time = time();
$mail_id = sprintf("%04d", $num);
$note = stripslashes($note);
$pafiledb_sql->query($db, "INSERT INTO $db[prefix]_files VALUES(\'NULL\', \'$composition_name\', \'$email\', \'$name\', \'$composition_version\', \'\', \'\', \'\', \'$dlurl\', \'$time\', \'$cat_id\', \'default.gif\', \'0\', \'0\', \'0\', \'0\', \'\', \'0\', \'1\', \'$filesize\', \'$mail_id\', \'$note\', \'$composition_synthesizers_data\')", 0);
Мне нужно чтобы в этом скрипте загружаемому файлу присваивалось рандомное имя, а затем после добавления информации в БД этот файл с рандомным именем был переименован по какому-то заданному шаблону (по какому это я уже придумаю сам).
-
все всегда сначала добавляют запись в базу получают ид и копируют сразу с новым именем
при ошибке строчку из базы стереть недолго
или ты вообще не понимаешь что этот код делает?
-
Попробую себя в роли телепата: Если тебе нужно просто запретить скачивать файлы напрямую, а не через твой скрипт, то директорию с файлами надо вынести из корневой директории твоего сайта.
Если этого сделать нельзя, то можно просто положить в директорию с файлами файл .htacces всего с одной строчкой:
deny from all
Таким образом, доступ браузеру в эту директорию будет закрыт, а php сможет открывать и читать файлы из этой директории как обычно.
-
RomikChef
Ты прав. Действительно лучше сначала занести а потом закачивать. Это немного меняет задачу. Тогда мне нужно немного другое - после занесения в базу инфы о файле присвоить файлу сразу не рандомное имя, а имя состоящее из cXXXX.zip, где XXXX - значение поля file_id в базе, куда мы перед закачкой заносили инфу. Пробовал так сделать, но ничего не получается :(
Значит тут я присваиваю в $num значение file_id у последней записи и добавляю 1:
$num[id] = $pafiledb_sql->query($db, "SELECT file_id FROM $db[prefix]_files ORDER BY file_id DESC", 2);
$num[id]++;
Но лезут ошибки:(
Вот. И насколько я понял добавлять в базу инфу (INSERT INTO) надо сразу после оператора if $submit {? Только если так сделать будет проблема - если файл не пройдет проверку на размер и формат то строка в базе останется, а файл не закачается :(
-
бред какой
mysql_insert_id()
-
RomikChef
Спасибо, на первый вопрос ты ответил а на второй нет :(
Про то где выполнять операцию INSERT INTO
-
не понял - где был этот вопрос?
я его не видел.
а делать - где угодно между местом, где есть все данные для занесения и местом, где файл копируется
-
RomikChef
Мне надо занести в базу ДО ТОГО как файл закачается. Покажи пожалуйста где в этом скрипте (какой строчкой) идет ЗАКАЧКА файла на сервер? Я её не вижу.
-
я думаю, здесь.
if (move_uploaded_file($_FILES[\'userfile\'][\'tmp_name\'
], $compositions_directory.sprintf("c%04d.zip", $num))) {
-
А если у человека который закачивает файл оборвётся связь и файл не закачается, то что тогда делать?
Запись в базе будет, а файла - нет.
Как?:
1) Проверить закачался файл или нет
2) Если нет, то как удалить запись которую только что добавили
-
не будет
все уже проверено до нас
-
только не спрашивай - где.
почитай http://faq.phpclub.net/upload
и постарайся составить хотя бы приблизительное представление о том, как работает твой код.
-
кстати, вся эта тень не нужна
DJ Fat:
$num=0;
if (file_exists($counter_fname)){ // Если файл существует
$f=fopen($counter_fname,"r");
$num=fread($f,filesize($counter_fname));
fclose($f);
}
$num++;
$fh=fopen($counter_fname,"w+");
fputs($fh,$num);
fflush($fh);
fclose($fh);
$num ты берешь из базы