доброго времени суток всем! Ребята помогите может кто знает, я не профи в php, есть форма написанная на php и взаимодействующая с базой данных mysql, но есть проблемка, в этой форме доступна загрузка файлов на сервер только в архивах расширения rar или zip, требуется сделать так что бы файлы любых расширений подгружались на сервер, и не просто подгружались, а что бы еще были видны, открывались онлайн в браузере без скачивания файла, и сохранялись в отдельных директориях на сервере. Возможно ли такое? PHP: <?php if (!preg_match("/index.php/i", $_SERVER['PHP_SELF'])) {die ('Access denied');} require_once("include/kz_open.php"); require_once("include/kz_save.php"); require_once("include/top.php"); if (!empty($_GET['ac'])) { $con = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND."); $sqlv = "select namefile from zo_mat where id_mat= '".$_SESSION['u18_com_matsel']."'"; $resv = db_query($sqlv,$con); $tmasv = db_fetch_array($resv); if ($tmasv['namefile'] == 1) $rash='rar'; else $rash='zip'; @unlink ($catalogdata . $_SESSION['u18_com_matsel']. "." . $rash); $sqlv = "delete from zo_mat where id_mat= '".$_SESSION['u18_com_matsel']."'"; $resv = db_query($sqlv,$con); echo "<SCRIPT LANGUAGE=\"javascript\">location.href='index.php?apage=18';</SCRIPT>"; } if (!empty($_GET['nf'])) { $con = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND."); $sqlv = "update zo_mat set name='".htmlspecialchars($_GET['nf'],null, 'cp1251')."' where id_mat= '".$_SESSION['u18_com_matsel']."'"; $resv = db_query($sqlv,$con); echo "<SCRIPT LANGUAGE=\"javascript\">location.href='index.php?apage=18';</SCRIPT>"; } if ( !empty($_POST['f18_b_view'])) { $con = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND."); $sqlv = "select namefile from zo_mat where (id_mat=".$_SESSION['u18_com_matsel'].")"; $resv = db_query($sqlv,$con); $tmasv = db_fetch_array($resv); if ($tmasv['namefile'] == 1) $rash='rar'; else $rash='zip'; echo "<SCRIPT LANGUAGE=\"javascript\">window.open('". $catalogdata . $_SESSION['u18_com_matsel'] . "." . $rash ."','',''); </script>"; } if ( !empty($_POST['f18_b_download'])) { if (empty($_FILES['filename']['name'])) echo "<SCRIPT LANGUAGE=\"javascript\">alert('Не указан файл');</SCRIPT>"; else { $filename =$_FILES['filename']['name']; if ($_FILES["filename"]["size"]<31457280) { $rash = strtolower(substr($filename,strlen($filename)-3)); if (($rash=="rar") or ($rash=="zip")) { $ruplan = $_SESSION['u18_com_ruplan']; $typemat = $_SESSION['u18_com_typematsel']; $id_prepod= $_SESSION['tek_idprep']; if ($rash =='rar' ) $namefile=1; else $namefile=2; $con = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND."); $sqlv = "insert into zo_mat (id_ruplan, id_prepod,id_type,namefile) values ($ruplan,$id_prepod,$typemat,'$namefile')"; $resv = db_query($sqlv,$con); $sqlv = "select id_mat from zo_mat where (id_ruplan='".$_SESSION['u18_com_ruplan']."') and (id_prepod ='".$_SESSION['tek_idprep']."') and (id_type='".$_SESSION['u18_com_typematsel']."') order by id_mat"; $resv = db_query($sqlv,$con); while($tmasv = db_fetch_array($resv)) { $_SESSION['u18_com_matsel'] = $tmasv['id_mat']; } if (@move_uploaded_file($_FILES['filename']['tmp_name'],$catalogdata . $_SESSION['u18_com_matsel'] . "." . $rash)) {echo "<SCRIPT LANGUAGE=\"javascript\"> newname=prompt(\"Введите название материала:\",\"name\");location.href='index.php?apage=18&nf='+newname;</SCRIPT>";break;} else { echo "<SCRIPT LANGUAGE=\"javascript\">alert('Ошибка загрузки файла (Возможно, что размер файла ужасно велик)');</SCRIPT>"; $sqlv = "delete from zo_mat where id_mat= '".$_SESSION['u18_com_matsel']."'"; $resv = db_query($sqlv,$con); } } else {echo "<SCRIPT LANGUAGE=\"javascript\">alert('Ошибка загрузки файла (Загрузка только zip и rar архивов)');</SCRIPT>";} } else {echo "<SCRIPT LANGUAGE=\"javascript\">alert('Размер файла не должен превышать 25 Мегабайт');</SCRIPT>";} } } if ( !empty($_POST['f18_b_rename'])) { $con = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND."); $sqlv = "select name from zo_mat where (id_mat='".$_SESSION['u18_com_matsel']."')"; $resv = db_query($sqlv,$con); $tmasv = db_fetch_array($resv); ?> <SCRIPT LANGUAGE="javascript"> newname=prompt("Введите новое название материала:", '<?php echo trim($tmasv['name']);?>'); location.href='index.php?apage=18&nf='+newname; </SCRIPT> <?php break; } if ( !empty($_POST['f18_b_delete'])) { $con = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND."); $sqlv = "select name from zo_mat where (id_mat='".$_SESSION['u18_com_matsel']."')"; $resv = db_query($sqlv,$con); $tmasv = db_fetch_array($resv); ?> <SCRIPT LANGUAGE="javascript">if (confirm("Вы уверены, что хотите уничтожить материал <?php echo trim($tmasv['name']);?>?") ) { location.href='index.php?apage=18&ac=del'; } </SCRIPT> <?php } if (empty($_SESSION['u18_com_semsel'])) { $con = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND."); $sqlv = "select id_semestr from rp_semestr where status=1 order by id_semestr LIMIT 0 , 1"; $resv = db_query($sqlv,$con); $_SESSION['u18_com_semsel'] = db_result($resv, 0, 'id_semestr');} if (empty($_SESSION['u18_com_kurssel'])) { $_SESSION['u18_com_kurssel'] = 1; } if (empty($_SESSION['u18_com_specsel'])) { $_SESSION['u18_com_specsel'] = 0; } if (empty($_SESSION['u18_com_discsel'])) { $_SESSION['u18_com_discsel'] = 0; } if (empty($_SESSION['u18_com_matsel'])) { $_SESSION['u18_com_matsel'] = 0; } if (empty($_SESSION['u18_com_typematsel'])) { $_SESSION['u18_com_typematsel'] = 0; } if (empty($_SESSION['u18_com_ruplan'])) { $_SESSION['u18_com_ruplan'] = 0; } $iv_kurssel = $_SESSION['u18_com_kurssel']; $iv_semsel = $_SESSION['u18_com_semsel']; $iv_specsel = $_SESSION['u18_com_specsel']; $iv_discsel = $_SESSION['u18_com_discsel']; $iv_typematsel = $_SESSION['u18_com_typematsel']; $iv_matsel = $_SESSION['u18_com_matsel']; if( !empty($_POST['f18_com_sem']) ) { $_SESSION['u18_com_semsel'] = $_POST['f18_com_sem']; } if( !empty($_POST['f18_com_kurs']) ) { $_SESSION['u18_com_kurssel'] = $_POST['f18_com_kurs']; } if( !empty($_POST['f18_com_spec']) ) { $_SESSION['u18_com_specsel'] = $_POST['f18_com_spec'];} if( !empty($_POST['f18_com_disc']) ) { $_SESSION['u18_com_discsel'] = $_POST['f18_com_disc']; } if( !empty($_POST['f18_com_typemat']) ) { $_SESSION['u18_com_typematsel'] = $_POST['f18_com_typemat'];} if( !empty($_POST['f18_com_mat']) ) { $_SESSION['u18_com_matsel'] = $_POST['f18_com_mat'];} if ($iv_semsel<>$_SESSION['u18_com_semsel']) { $_SESSION['u18_com_specsel'] = 0; $_SESSION['u18_com_discsel'] = 0; $_SESSION['u18_com_typematsel'] = 0; $_SESSION['u18_com_matsel'] = 0; $_SESSION['u18_com_ruplan'] = 0; } if ($iv_kurssel<>$_SESSION['u18_com_kurssel']) { $_SESSION['u18_com_specsel'] = 0; $_SESSION['u18_com_discsel'] = 0; $_SESSION['u18_com_typematsel'] = 0; $_SESSION['u18_com_matsel'] = 0; $_SESSION['u18_com_ruplan'] = 0; } if ($iv_specsel<>$_SESSION['u18_com_specsel']) { $_SESSION['u18_com_discsel'] = 0; $_SESSION['u18_com_typematsel'] = 0; $_SESSION['u18_com_matsel'] = 0; $_SESSION['u18_com_ruplan'] = 0; } if ($iv_discsel<>$_SESSION['u18_com_discsel']) { $_SESSION['u18_com_typematsel'] = 0; $_SESSION['u18_com_matsel'] = 0; $_SESSION['u18_com_ruplan'] = 0; } if ($iv_typematsel<>$_SESSION['u18_com_typematsel']) { $_SESSION['u18_com_matsel'] = 0; $_SESSION['u18_com_ruplan'] = 0; } ?> <form name="f18" enctype="multipart/form-data" action="" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="31457280"> <! -- здесь указан размер --> <div align=center> <FIELDSET STYLE="border: 1px solid; padding: 5px; margin-top:10px; width: 700px; background: #ffffff"> <font color="blue">Выберите семестр, курс, специальность, предмет и тип материала</font><br> <TABLE border=0 cellspacing=1 width=100%> <TR><TD>Семестр<br> <select size=7 style="width: 120px; border: 1px solid; margin-left=10 margin-right=20;" name="f18_com_sem" onChange="submit()"> <?php $con = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND."); $sqlv = "select id_semestr, desctext from rp_semestr where status=1 order by id_semestr"; $resv = db_query($sqlv,$con); while($tmasv = db_fetch_array($resv)) { $_SESSION['u18_com_semsel'] == $tmasv['id_semestr'] ? $sv = 'selected' : $sv = ''; echo "<option value=".$tmasv['id_semestr']." $sv> ".$tmasv['desctext']."</option>\n"; } ?> </select> </TD> <TD>Курс<br> <SELECT SIZE=7 style="width: 30px; border: 1px solid;" NAME="f18_com_kurs" onChange="submit()">
Чтобы загружались любые файлы сделать не сложно, нужно этот кусок Код (Text): if (($rash=="rar") or ($rash=="zip")) { $ruplan = $_SESSION['u18_com_ruplan']; $typemat = $_SESSION['u18_com_typematsel']; $id_prepod= $_SESSION['tek_idprep']; if ($rash =='rar' ) $namefile=1; else $namefile=2; $con = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND."); $sqlv = "insert into zo_mat (id_ruplan, id_prepod,id_type,namefile) values ($ruplan,$id_prepod,$typemat,'$namefile')"; $resv = db_query($sqlv,$con); $sqlv = "select id_mat from zo_mat where (id_ruplan='".$_SESSION['u18_com_ruplan']."') and (id_prepod ='".$_SESSION['tek_idprep']."') and (id_type='".$_SESSION['u18_com_typematsel']."') order by id_mat"; $resv = db_query($sqlv,$con); while($tmasv = db_fetch_array($resv)) { $_SESSION['u18_com_matsel'] = $tmasv['id_mat']; } if (@move_uploaded_file($_FILES['filename']['tmp_name'],$catalogdata . $_SESSION['u18_com_matsel'] . "." . $rash)) {echo "<SCRIPT LANGUAGE=\"javascript\"> newname=prompt(\"Введите название материала:\",\"name\");location.href='index.php?apage=18&nf='+newname;</SCRIPT>";break;} else { echo "<SCRIPT LANGUAGE=\"javascript\">alert('Ошибка загрузки файла (Возможно, что размер файла ужасно велик)');</SCRIPT>"; $sqlv = "delete from zo_mat where id_mat= '".$_SESSION['u18_com_matsel']."'"; $resv = db_query($sqlv,$con); } } заменить на этот Код (Text): //if (($rash=="rar") or ($rash=="zip")) { $ruplan = $_SESSION['u18_com_ruplan']; $typemat = $_SESSION['u18_com_typematsel']; $id_prepod= $_SESSION['tek_idprep']; if ($rash =='rar' ) $namefile=1; else $namefile=2; $con = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND."); $sqlv = "insert into zo_mat (id_ruplan, id_prepod,id_type,namefile) values ($ruplan,$id_prepod,$typemat,'$namefile')"; $resv = db_query($sqlv,$con); $sqlv = "select id_mat from zo_mat where (id_ruplan='".$_SESSION['u18_com_ruplan']."') and (id_prepod ='".$_SESSION['tek_idprep']."') and (id_type='".$_SESSION['u18_com_typematsel']."') order by id_mat"; $resv = db_query($sqlv,$con); while($tmasv = db_fetch_array($resv)) { $_SESSION['u18_com_matsel'] = $tmasv['id_mat']; } if (@move_uploaded_file($_FILES['filename']['tmp_name'],$catalogdata . $_SESSION['u18_com_matsel'] . "." . $rash)) {echo "<SCRIPT LANGUAGE=\"javascript\"> newname=prompt(\"Введите название материала:\",\"name\");location.href='index.php?apage=18&nf='+newname;</SCRIPT>";break;} //else //{ //echo "<SCRIPT LANGUAGE=\"javascript\">alert('Ошибка загрузки файла (Возможно, что размер файла ужасно велик)');</SCRIPT>"; // $sqlv = "delete from zo_mat where id_mat= '".$_SESSION['u18_com_matsel']."'"; // $resv = db_query($sqlv,$con); //} //}
в принципе сработало, но появились следующие проблемы, с архивами все так же по прежнему, но с другими файлами при скачивании их с сервера он пишет Not Found The requested URL /data/7493.zip was not found on this server.
Браузер умееет plain text, html, картинки, иногда pdf. Всё остальное браузер не умеет. Google Docs - там куча сложного кода от гугла, который объясняет браузеру, как всякую хрень показывать
В этом скрипте я не вижу, чтобы был код отдающий файл, в коде заливаемый файл дербанится на имя и разрешение и пишется в базу, причем если разрешение не rar то оно пишется как zip, поэтому скорее всего надо весь проект под ваши цели дорабатывать, мелкими правками не обойтись.
Вот я нашел фрагмент где он отдает файл под определенным разрешением, это вот ZIP, а на сервере файлы загружаются в своем расширении, вот сижу и думаю как сделать так что бы он открывал и отдавал с сервера файлы всех расширений, но в коде стоит условие, вот думаю может выборку через case поставить? вот фрагмент кода: Код (Text): if ( !empty($_POST['f18_b_view'])) { $con = db_connect($hostname, $username, $password, $dbname) or DIE("DATABASE FAILED TO RESPOND."); $sqlv = "select namefile from zo_mat where (id_mat=".$_SESSION['u18_com_matsel'].")"; $resv = db_query($sqlv,$con); $tmasv = db_fetch_array($resv); if ($tmasv['namefile'] == 1) $rash=''; else $rash='zip'; echo "<SCRIPT LANGUAGE=\"javascript\">window.open('". $catalogdata . $_SESSION['u18_com_matsel'] . "." . $rash ."','',''); </script>"; } --- Добавлено --- или может можно как то по другому присвоить переменной $rash значение всех видов расширений?
Если это строку Код (Text): if ($tmasv['namefile'] == 1) $rash=''; else $rash='zip'; закомментировать, то должно отдавать файлы как есть
какое расширение ставлю вместо zip то он и забирает с сервера, но только одно. пробовал, выводит следующую страницу: Not Found The requested URL /data/7459. was not found on this server.
Честно говоря тут еще и javascript замешан, а его я совсем не знаю. Чтобы разобраться тут нужно смотреть код целиком и переделывать все в комплексе, я тут Вам не помогу.
еще прикол такой идет, когда я закидываю файл у которого свое расширение состоит более чем из 3 символов то он сохраняет на сервере его с расширением трех последних символов к примеру файл 1.jpeg он сохранится в папке на сервере с расширением 1.peg. --- Добавлено --- огромное спасибо за то что помогли, я так вообще собирался и базу тоже ковырять, думал в ней причина! А так вы мне указали где и что копать!
По сути нужно исключить весь код который модифицирует имена файлов при сохранении и отдавать их как есть, хотя не понятно зачем вообще все эти движения, возможно там что-то в логике скриптов на это завязано, в идеале понять для чего все эти скрипты были созданы, правильно ли они отрабатывали поставленную задачу, затем понять как изменилась поставленная задача и исходя из этого доработать скрипты.
уже огромное спасибо за то что помогли, я так вообще собирался и базу тоже ковырять, думал в ней причина! я честно говоря сам не пойму для чего здесь половина скриптов, и для чего менять имя файла при сохранении на сервер, но понял одно что джаваскрипт тут не причем, так как он всеголишь открывает каталог куда сохранить файл с сервера.