|
|
|
| $papka = './files/'; // путь для сохранения файлов
$VremenImya = $_FILES['user_file']['tmp_name']; // путь и имя временного файла
$type=$_FILES['user_file']['type']; // тип переданного файла
$nacheImy=$_FILES['user_file']['name']; // имя постоянного файла
$size=$LILES['user_file']['size'];
// теперь переместим файл из временного в наш каталог и запишем его
move_uploaded_file($VremenImya,$nacheImy);
полученый файл получается поврежденным.
Помогите пожалуста разобраться в чем тут дело. | |
|
|
|
|
|
|
|
для: prosot
(01.08.2012 в 19:01)
| | А вы перед тем как перемещать файл, проверьте наличие ошибок - $_FILES['user_file']['error'] | |
|
|
|
|
|
|
|
для: confirm
(01.08.2012 в 19:03)
| | сейчас проверю. но ситуация вот в чем . файл графический .gif его переношу из winXP на хост с линоксом, может в этом проблема. При этом и размер и тип у полученного файла совпадают | |
|
|
|
|
|
|
|
для: prosot
(01.08.2012 в 19:12)
| | Да какая разница с какой платформы на какую вы закачиваете файл. Это бинарные данные.
На тип, который вам передал клиент в форме не надейтесь (это на будущее).
Если нет ошибок при загрузке, размер загружаемых POST данных и размер файла не превышают указанные в настройках, то - либо вы что-то не так делаете, либо действительно сервер бьет данные.
А как при это происходит загрузка текста из полей формы, и загрузка текстового файла? | |
|
|
|
|
|
|
|
для: confirm
(01.08.2012 в 19:28)
| | текст и текстовые файлы передаются нормально | |
|
|
|
|
|
|
|
для: prosot
(01.08.2012 в 19:31)
| | вот взял код с сайта - конечный результат тот-же. скопированный файл неоткрыватся
$path_to_files = './files/'; // путь для сохранения файлов
// если у нас несколько полей userfile[],
// отметаем те, в которые ничего не было выбрано
$good_name = array_filter($_FILES['userfile']['name']);
if (sizeof($good_name) != 0) { // если массив файлов не пустой
foreach ($good_name as $key => $name) {
$type = $_FILES['userfile']['type'][$key];
$tmp_name = $_FILES['userfile']['tmp_name'][$key];
$size = $_FILES['userfile']['size'][$key];
// эта функция проверяет был ли загружен файл во временную директорию php
if (!is_uploaded_file($tmp_name)) {
echo "An error happened while loading. Failed.";
continue;
}
// выковыриваем имя и расширение файла -
$file_ext = substr($name, 1 + strrpos($name, "."));
// - это может понадобиться, например, для сохранения в базу данных
$file_name = substr($name, 0, strrpos($name, "."));
// делаем реальный путь в файловой системе
$real_path = realpath($path_to_files);
// создаем в нашей директории временный файл с уникальным именем,
// это делается для того, чтобы избежать одновременного
// закачивания файлов с одним именем
$temp_file_name = tempnam($real_path, "UPLF");
// делаем новое, более привлекательное, имя файла для хранения на сервере
$file_name = $temp_file_name."original.".strtolower($file_ext);
// переносим загруженный временный файл в файл со
// сделанным нами уникальным именем
if (move_uploaded_file($tmp_name, $file_name)) {
echo "Saved!";
unlink($temp_file_name); // удаляем временный файл
}else {
echo "Failed!";
continue;
}
}
}else {
echo "No files were loaded.";
} | |
|
|
|
|
|
|
|
для: prosot
(01.08.2012 в 19:36)
| | При помещении кода в форму, обрамляйте его тегами [сode][/сode], и в начале своего кода помещайте php-тег - <?, чтобы код имел подсветку, иначе такое читать, и разбираться в нем не охота.
А код вообще ужас, думаю вас это не удивит. Выполните этот код написанный по вашей "технологии":
<?
echo '<pre>';
if($_FILES) {
$good_name = array_filter($_FILES['userfile']['name']);
print_r($good_name);
foreach ($good_name as $key => $name) echo $_FILES['userfile']['name'][$key].'<br>';
}
?>
<form method="post" enctype="multipart/form-data">
<input type="file" name="userfile[]" />
<input type="file" name="userfile[]" />
<input type="file" name="userfile[]" />
<input type="submit" value="Send" />
</form>
| Что наблюдаете?
PS. Не буду дожидаться ответа. А теперь в цикле выводите так:
<?
foreach ($good_name as $key => $name) echo $name.'<br>';
|
Спрашивается - зачем нужен этот цикл? Ради индекса чтобы обратиться к другим ключам массива? Зачем тогда так необдуманно применили array_filter()? | |
|
|
|
|
|
|
|
для: confirm
(01.08.2012 в 19:58)
| | Большое спасибо. Решение вопроса нашлось :
В корне сайта создал файл .htaccess:
в нем прописал две строки
CharsetDisable on
CharsetRecodeMultipartForms Off
теперь файлы загружаются/отображаются корректно. ( это подсказали на хостинге).
По поводу цикла... используется сразу три поля загрузки файлов ( ну там разные размеры... и т.д)
Еще раз большое спасибо , я новичок , поэтому много незнаю. | |
|
|
|
|
|
|
|
для: prosot
(02.08.2012 в 12:56)
| | array_filter() обходит массив рекурсивно. У вас эта функция ничего полезного не делает, тем более, что в последствие вы обходите массив циклом, а фильтруете вы совсем не то, что следовало бы.
Можно вычесть пустое из массива, но не array_filter(), а другими функциями, но это полезно тогда, когда, например, нужно получить набор, который нужно как либо представить, или который будет служить для сравнения.
В вашем коде все это лишнее, и не только указанная функция, но и realpath(), и т.д.
Получая массив загруженных файлов, проверяйте его сразу в цикле, причем проверять надо не "пустое ли имя файла", а ключ "error" - если нет ошибок в этом ключе, значит файл загружен и можно производить с ним действия. Ключ будет содержать имя даже в том случае, если файл закачан с ошибкой - не полностью!
Доверяться на "чик по точке перед расширением, и все окейно", это по меньшей мере собирать у себя на сервере мусор вместо изображений, так как я сохраню анекдот любой под расширением gif, и вы его своей загрузкой "скушаете".
Ну и все остальное у вас тоже... Лучше поищите в сети готовые примеры загрузки файлов на сервер, разберите их, проанализируйте, а то, что вы тут выставили выбросите в помойку. | |
|
|
|