![]() |
Проблема с закачкой файлов базу.
Перечитал сообщения на форуме и не только на этом но так и несмог понять в чём дело.
Задача значит такая - выводится таблица с файломи закаченными пользователем (размер, тип и т.п.), но нужно чтобы название файла было ссылкой а вместо этого какие-то каракули и ссылка никуда не приводит. Вот посмотрите пожалуйста: Это аплод: PHP код:
PHP код:
|
move_uploaded_file тебе поможет.
То есть после закачки, файл надо перенести в доступное по http место ( к примеру, в специально созданную директорию в корне сайта) и писать в базу место "постоянной дислокации" зачанного файла. А по пути $_FILES['upload']['tmp_name'] к моменту просмотра может ничего не оказаться. К тому же директория для складирования временных файлов как правило недоступна для веб-сервера :) |
Переписал но не помогло.
Мне нужно чтобы скрипт выводи спсок файлов принадлежащих конкретному юзеру ввиде ссылок на них и потом по нажатии на эти ссылки можно было этот файл закачать. Хранить обязательно в БД сами файла, а не пути к ним. Бьюсь уже 2 суток почти без перерыыва и не знаю как. На phpclub.ru все очень крутые и не захотели мне отвечать. Помогите бо очень надо. |
//Этот кусок в принципе работает, если складывать файлы в базу.
$upload = $_FILES['upload']['tmp_name']; $upload_name = $_FILES['upload']['name']; $upload_size = $_FILES['upload']['size']; $upload_type = $_FILES['upload']['type']; $ext = get_extension($upload_name); $file = addslashes(fread(fopen($upload, "r"),$upload_size)); /* а вот работает ли запрос - вопрос, тут надо глядеть, что у тебя в базе твориться. Предполагается, что структура таблицы имеет вид CREATE TABLE my_table (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, username VARCHAR(25), filedata BLOB, filename VARCHAR(50), filetype VARCHAR(8), filesize INT, fileext VARCHAR(8)) Тогда запрос принимает вид: */ $query = "INSERT INTO my_table SET username = '$username', filedata = '$file', filename = '$upload_name', filetype = '$upload_type', filesize = '$upload_size', fileext = '$ext')"; $result = mysql_query($query); /*---вроде как сложили все в базу, правда могут быть косяки с BLOB'om, но это уже копать в сторону версии mySQL и php, тут только RTFM спасает ---*/ /* Теперь помыслим про доставание списка. */ function get_user_files($login,$db) { //тут - адрес страницы-обработчика файлов. $adres = 'file.php'; $query = "SELECT * FROM filedata WHERE username='$login' "; $result = mysql_query($query,$db); <table width="200" border="1"><tr> <th>Name</th> <th>Type</th> <th>Size</th> <th>Extension</th></tr>'; while ($row = mysql_fetch_array($result, YSQL_ASSOC)) {echo '<tr><td><a href=$adres?id="'.$row['id'].'>'.$row['name'].'</a> </td><td>'.$row['type'].' </td><td>'.$row['size'].' </td><td>'.$row['ext'].'/>'; } echo '</table>'; } /*Теперь - содержание файла-обработчика, в нашем примере file.php*/ <?php if (!isset($_GET['id'])) {die("Нет ничего.");} //это чтобы фигню не написали : $id = $_GET['id'] + 1; $id = $id - 1; /*выполним соединение с базой, достанем данные*/ $db = mysql_connect('host', 'login', 'pass'); mysql_select_db('database', $db); $result = mysql_query("SELECT filedata, filetype, filesize FROM my_table WHERE id='$id'", $db); $row = mysql_tetch_array($result); /*отправим в браузер информацию о типе и размере файла*/ header("Content-type: ".$row[1]."\r\nContent-Length: ".$row[2]); /*Выведем содержимое*/ echo $row[0]; mysql_free_result($result); mysql_close($db); ?> |
Спасибо огоромное.
Вот это я понимаю нормальный ответ и форум. Впринципе я уже нашёл, что искал так что кому интересно смоотрите: http://www.php-mysql-tutorial.com/php-mysql-upload.php http://www.devarticles.com/c/a/MySQL...P-and-MySQL/3/ |
Тут так сказать развитие ситуации.
Как справится с проблемой закачивания файлов названия которых на русском языке. А то вот такое: Warning: move_uploaded_file(../files/Antoine/????? ?? ?????.jpg) [function.move-uploaded-file]: failed to open stream: Invalid argument in D:\Antony\Papers\Works\PHP\Base\www\diplom\script\upload_func.php on line 20 Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\WINDOWS\TEMP\php350.tmp' to '../files/Antoine/????? ?? ?????.jpg' in D:\Antony\Papers\Works\PHP\Base\www\diplom\script\upload_func.php on line 20 Possible file upload attack! Warning: fopen(../files/Antoine/????? ?? ?????.jpg) [function.fopen]: failed to open stream: Invalid argument in D:\Antony\Papers\Works\PHP\Base\www\diplom\script\upload_func.php on line 29 Warning: fread(): supplied argument is not a valid stream resource in D:\Antony\Papers\Works\PHP\Base\www\diplom\script\upload_func.php on line 29 Warning: fclose(): supplied argument is not a valid stream resource in D:\Antony\Papers\Works\PHP\Base\www\diplom\script\upload_func.php on line 30 File ????? ?? ?????.jpg succsessfully loaded to database. Go to members page Warning: unlink(../files/Antoine/????? ?? ?????.jpg) [function.unlink]: Invalid argument in D:\Antony\Papers\Works\PHP\Base\www\diplom\script\upload_func.php on line 43 И ещё при нажатии на сслку файл закачивается с именем скрипта хотя я и передал header("Content-Disposition: attachment; filename=$name"); и к тому же оказывается битым. |
С тем что закачивается битым разобрался, но имя всё-равно download.
Ну и файла с русскими названиями всё равно вадают ошибку. |
\r\n в конце хеадера с расположением контента, длину контента надо давать, в общем - читай стандарт.
Русские названия - ну да... Простейшее решение - делать замену русских букв на латинские аналоги на стороне клиента и с полным правом отказывать в приеме необработанных файлов. |
Я это уже решил - там просто опечатку устроил а content-lenght я и так отправлял.
А можешь поподробнее про замену символов. Может можно хранить русские символы в мускуле. У меня мускул 4.1 м кодировка по умолчанию cp1251. |
Про базу - после подключения к базе
mysql_query("SET NAMES cp1251"); Про замену - почитай доку по str_replace() |
| Часовой пояс GMT +4, время: 00:01. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.