2016-08-11 2 views
2

У меня проблема. Я создал веб-страницу с загрузкой файлов, у меня есть база данных (MySQL) с правильным URL-адресом для файла (путь к файлу) (в базе данных только URL-адрес файла, файл находится в папке на сервере). И теперь я пытаюсь написать/искать php-скрипт, чтобы загрузить этот файл, что было загружено. Все в сети работает хорошо, но эти сценарии загрузки не работают. Я читаю, и я думаю, что лучший способ для меня будет загружаться с помощью «заголовка», но я пытался и ничего не делал. Файл загружается на наш диск, имя правильно, расширение файла ok, файл открыт в правильной программе, но если файл имеет в имени символы (';', ':' и т. Д.), Файл загружается без этих символов и является неправильным (отсутствие расширения, плохое имя). И вторая проблема: все загруженные файлы пустые (размер 0 b), все в порядке, но они пустые, некоторые подсказки? Заранее спасибо за помощьPHP-Force скачать файл с URL-адреса

Мои плохие скачать коды:

<?php 
    $data=date('Y-m-d_H:i:s'); 
    $nazwa=$_POST['downtitle']; 
    $urlek=$_POST['downurl']; 
    $extrozsz=$_POST['downext']; 
    $filePath = $urlek; 
    $fileName = $nazwa.$data.".".$extrozsz; 

    //------------------------------------------------------------------------ 

// $fd = fopen($filePath,"r"); 
// $size = filesize($filePath); 
// $contents = fread($fd, filesize($filePath)); 

// fclose($fd); 

// header("Content-Type: application/octet-stream"); 
// header("Content-Length: $size;"); 
// header("Content-Disposition: attachment; filename=$fileName"); 

// echo $contents; 

    //---------------------------------------------------------------------- 


//  set_time_limit(0);  
//  while($urlek = $response->fetch()) 
//  { 
//  $my_pliki = file_get_contents("$urlek"); 
//  $my_file = fopen("$urlek","w+"); 
//  fwrite($my_file,$my_pliki); 
//  fclose($my_file); 
//  } 

//---------------------------------------------------------------------------- 

$quoted = $filePath; 
$size = filesize($file); 

header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename=' . $quoted); 
header('Content-Transfer-Encoding: binary'); 
header('Connection: Keep-Alive'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 
header('Content-Length: ' . $size); 

>

ответ

0

Параметр имя_файла имеет некоторые ограничения, которые хорошо описаны в RFC6266

Итак, когда вы хотите использовать символы, не присутствуют в наборе символов ISO-8859-1, тогда вам нужно использовать заголовок filename*, или вам нужно снять или заменить эти символы из имени файла. Nice решение сделать это можно найти here

0

Спасибо, я изменить мой PHP на это:

<?php 
    $data=date('Y-m-d_H:i:s'); 
    $nazwa=$_POST['downtitle']; 
    $urlek=$_POST['downurl']; 
    $extrozsz=$_POST['downext']; 
    $filePath = $urlek; 
    $fileName = $nazwa.$data.".".$extrozsz; 

     header("Pragma: public"); 
     header("Expires: 0"); 
     header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
     header("Content-Type: application/force-download"); 
     header("Content-Disposition: attachment; filename=\"" . $fileName."\""); 
     header("Content-Description: File Transfer"); 
     readfile($filePath); 

?> 

И все теперь нормально, но у меня есть один вопрос сейчас: В базе данных MySQL У меня есть название, описание , дата добавления, дата премьеры, и я хочу иметь поле поиска. Я сделал это в input type = "search", но какой скрипт теперь используется для поиска в этих указанных таблицах в базе данных, сначала открыть базу данных, это я знаю, но что позже какая команда для поиска в базе данных? Я знаю о «как», но лучше? А ведь верните правильный результат и покажите все из базы данных, где это искомое слово в порядке. Некоторые подсказки? Извините за слабый английский и спасибо.

+0

Это ответ на ваш собственный вопрос или редактирование исходного вопроса? Кажется, вы отвечаете на свой вопрос другим вопросом. Плохая практика. Лучше, если вы зададите новый вопрос: «У меня есть один вопрос ...» – Martin

+0

Согласен. Теперь у вас есть 3 вопроса под одним заголовком, поэтому кто-то, кто может и хочет, никогда не увидит последние вопросы. Кроме того, вы можете получить предложенные ответы, когда вы зададите свой вопрос. –

0

Хорошо, все в порядке, но другая проблема. У меня есть код для показа новостей на веб-сайте. Все новости показываются в одно и то же время (слишком длинный сайт). Я хочу иметь внизу номера веб-сайтов (на всех веб-сайтах это касается пересылки на вторую подстраницу со старыми новостями). Но как это сделать? Sup или саб для малых слов, числа и т.д., но все извлекается форма базы данных:

$zapytanie='SELECT * FROM filetable WHERE Section="Other" ORDER BY ID DESC LIMIT 10'; 

Это в моем PHP код запроса для показа последних 10 новостей, но если добавить обычно небольшое число в нижней части, как построить код для показа следующих 10 новостей (нет, где id = «10-11», потому что, если у меня будет 1 тысяча новостей или более, это слишком примитивно), у меня должен быть автоматический код для показа страниц со следующими 10 или 20 новостями: как?

+0

'LIMIT' может принимать два аргумента: ** смещение ** и ** возврат count **, поэтому вы можете сделать« LIMIT , 'so' LIMIT 20 , 10' вернет 10 записей, начиная с 21-й записи (21-> 30). [Руководство по MySQL] (https://dev.mysql.com/doc/refman/5.5/en/select.html) – Martin