Загрузка файла PHP - PullRequest
       21

Загрузка файла PHP

0 голосов
/ 23 февраля 2009

Я пытаюсь загрузить файлы на свой сервер, используя php, чтобы сохранить их в двоичном виде в моей базе данных mysql, но я не могу заставить его работать, вот скрипт, который я использую, я думаю, что он как-то связан с "$ _FILES", потому что когда я вынимаю это "&& $ _FILES ['userfile'] ['size']> 0", скрипт начинает работать, но затем переменные, которые используют "$ _FILES", не определены. *

if(isset($_POST['upload']) && $_FILES['userfile']['size'] >  0) {
$fileName = $_FILES['userfile']['name'];
$tmpName  = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];

$fp      = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);

if(!get_magic_quotes_gpc())
{
    $fileName = addslashes($fileName);
}

db_connect();
db_select();

$query = "INSERT INTO upload (name, size, type, content ) ".
"VALUES ('$fileName', '$fileSize', '$fileType', '$content')";

mysql_query($query) or die('Error, query failed');
db_disconnect();

echo "<br>File $fileName uploaded<br>";
}

Ответы [ 6 ]

3 голосов
/ 24 февраля 2009

Это двукратный процесс, сначала сама загрузка, а затем манипуляции на сервере. Первая проверка должна была убедиться, что файл был даже загружен. Для этого вы можете использовать после строки

$fileName = $_FILES['userfile']['name'];

Использование:

if(is_uploaded_file($fileName)) {
  // Here goes all the file manipulation/storage/etc
} else {
  echo 'Error: File could not be uploaded.';
}

Попробуйте использовать это и, возможно, повторно опубликовать, если файл действительно был загружен. То, что $ _FILES имеет содержимое, не обязательно означает, что файл был загружен на сервер.

3 голосов
/ 23 февраля 2009

Вам лучше использовать статус загрузки файла , чтобы проверить, была ли загрузка успешной.

И не используйте функцию addslashes для запросов MySQL. Вместо этого используйте mysql_real_escape_string.

2 голосов
/ 23 февраля 2009

Если вы загружаете файлы с формой, есть ли в теге «форма» enctype = «multipart / form-data»?

1 голос
/ 23 февраля 2009

Я предполагаю из вашего примера, что ваше входное имя upload. <input type="file" /> результаты в PHP сортируются не в $_POST, а в $_FILES. Документация использует $_FILES['userfile'] в качестве поля примера, но если ваш ввод объявлен как <input type="file" name="upload" />, вам следует просто использовать $_FILES['upload'].

1 голос
/ 23 февраля 2009

Я предполагаю, что ваше поле, которое публикуется, называется "userfile"?

Кроме того, это не относится непосредственно к вашему вопросу, но обычно считается, что лучше хранить файлы в файловой системе, а не в MySQL. Файловые системы предназначены для хранения больших блоков двоичных данных, а базы данных - нет.

0 голосов
/ 07 мая 2011

попробуйте сделать print_r ($ FILES) и определить, в чем проблема. Может быть форма не нужного типа?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...