Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
 Аватар для Sanu0074
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5

Фуекция переименования файла неработает

12.01.2011, 17:36. Показов 4160. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Народ, написал код, в котором из формы летит на сайт файл, его описание заносится в базу, ссылка генерируется из имени файла и приставок и отправляется в базу, и сталкнулся с проблемой:"Файлы в именах которых есть пробелы незагружаются!!!" и чтоб её решить решил переименовать файл перед тем как данные о нем влетят в базу, в качестве нового имени решил присвоить "id+тип файла", но браузер выдает ошибку в строке с функцией rename():
Файл отправлен
Вот переменная: rr.txtlocalhost/files
Notice: Undefined variable: id in w:\home\localhost\www\files492\upload.ph p on line 31
[Денвер: показать возможную причину ошибки]
Warning: rename(rr.txt,text/plain): No such file or directory in w:\home\localhost\www\files492\upload.ph p on line 31


В базу внесено!
http://localhost/files492/files/


вот мой код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
include("block/connect.php");
 
if(isset($_POST['id'])) {$id=$_POST['id'];}
if(isset($_POST['name'])) {$name=$_POST['name'];}
if(isset($_POST['des'])) {$des=$_POST['des'];}
if(isset($_POST['link'])) {$link=$_POST['link'];}
?>
 
<?php
$uploaddir = './files/';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . 
        $_FILES['userfile']['name'])) 
{
    print "Файл отправлен";
        
        printf("<br>Вот переменная: %s", 
        $_FILES['userfile']['name']);
        
        $public_dir=$_SERVER['HTTP_HOST'].'/files';
        echo "$public_dir";
}
 else
{
    print "There some errors!";
}
?>
 
<?php
 
$name = rename($_FILES['userfile']['name'],$id.$_FILES['userfile']['type']);
        $link = 'http://'.$_SERVER['HTTP_HOST'].'/files492/files/'.$name;
 
 
    $result = mysql_query("INSERT INTO files (name,des,link) VALUES ('$name','$des','$link')");
if($result=='true') 
    {echo "<p>В базу внесено!</p>";}
else 
    {echo "<p>В базу НЕвнесено!</p>";}
    
    echo $link;
    echo "<br>";
    echo $name;
 
?>
В чём проблема? что нужно чтоб функция заработала?
очень нужна ваша помощь, зарание благодарен!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.01.2011, 17:36
Ответы с готовыми решениями:

Загрузка изображения и переименования файла
всем привет!... сделал форму загрузки изображения на сервер и занесения в базу. теперь такой момент - при загрузке файла мне надо...

Функция загрузки файла на сервер и сразу его переименования!
Написал код который грузит файл на сайт, переименовывает его если есть русские сиволы и недопустимые символы: &lt;?php ...

Защита файла от переименования
Visual Studio 2008, проект MFC. Есть ли какие-нибудь способы защитить файл от переименования, но чтобы была возможность удалить его?

8
126 / 93 / 18
Регистрация: 09.01.2011
Сообщений: 467
12.01.2011, 18:02
Цитата Сообщение от Sanu0074 Посмотреть сообщение
Notice: Undefined variable: id in w:\home\localhost\www\files492\upload.ph p on line 31
уведомляет о том, что переменная $id не объявлена

Цитата Сообщение от Sanu0074 Посмотреть сообщение
Warning: rename(rr.txt,text/plain): No such file or directory in w:\home\localhost\www\files492\upload.ph p on line 31
уведомляет о том, что файла не существует.

Может мой совет и лишний, но лучше, если в имени файла пробел, то заменяйте его на нижнее подчеркивание.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$uploaddir = './files/';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . str_replace(' ', '_', $_FILES['userfile']['name']))) 
{
    print "Файл отправлен";
        
        printf("<br>Вот переменная: %s", 
        $_FILES['userfile']['name']);
                
                $public_dir=$_SERVER['HTTP_HOST'].'/files';
                echo "$public_dir";
}
 else
{
    print "There some errors!";
}
?>
А если отвечать четко на Ваш вопрос, то пробуйте так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
 
$name = rename($uploaddir . $_FILES['userfile']['name'],$uploaddir . $id.$_FILES['userfile']['type']);
                $link = 'http://'.$_SERVER['HTTP_HOST'].'/files492/files/'.$name;
 
 
        $result = mysql_query("INSERT INTO files (name,des,link) VALUES ('$name','$des','$link')");
if($result=='true') 
        {echo "<p>В базу внесено!</p>";}
else 
        {echo "<p>В базу НЕвнесено!</p>";}
        
        echo $link;
        echo "<br>";
        echo $name;
 
?>
1
 Аватар для Sanu0074
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5
12.01.2011, 18:11  [ТС]
Цитата Сообщение от Dellok Посмотреть сообщение
уведомляет о том, что переменная $id не объявлена

уведомляет о том, что файла не существует.

Может мой совет и лишний, но лучше, если в имени файла пробел, то заменяйте его на нижнее подчеркивание.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$uploaddir = './files/';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . str_replace(' ', '_', $_FILES['userfile']['name']))) 
{
    print "Файл отправлен";
        
        printf("<br>Вот переменная: %s", 
        $_FILES['userfile']['name']);
                
                $public_dir=$_SERVER['HTTP_HOST'].'/files';
                echo "$public_dir";
}
 else
{
    print "There some errors!";
}
?>
А если отвечать четко на Ваш вопрос, то пробуйте так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
 
$name = rename($uploaddir . $_FILES['userfile']['name'],$uploaddir . $id.$_FILES['userfile']['type']);
                $link = 'http://'.$_SERVER['HTTP_HOST'].'/files492/files/'.$name;
 
 
        $result = mysql_query("INSERT INTO files (name,des,link) VALUES ('$name','$des','$link')");
if($result=='true') 
        {echo "<p>В базу внесено!</p>";}
else 
        {echo "<p>В базу НЕвнесено!</p>";}
        
        echo $link;
        echo "<br>";
        echo $name;
 
?>
а вот вопрос по функции preg_replace, она почемуто нехочет удалять пробелы....
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
 
$name1 = $_FILES['userfile']['name'];
$space=" ";
$p="_";
$name = preg_replace ($space, $p, $name1);
        $link = 'http://'.$_SERVER['HTTP_HOST'].'/files492/files/'.$name;
 
 
    $result = mysql_query("INSERT INTO files (name,des,link) VALUES ('$name','$des','$link')");
if($result=='true') 
    {echo "<p>В базу внесено!</p>";}
else 
    {echo "<p>В базу НЕвнесено!</p>";}
    
    echo $link;
 
?>
0
126 / 93 / 18
Регистрация: 09.01.2011
Сообщений: 467
12.01.2011, 18:12
Зачем Вам использовать прег-реплэйс, когда намного быстрее эту работу выполнит str_replace().
0
 Аватар для Sanu0074
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5
12.01.2011, 18:17  [ТС]
Цитата Сообщение от Dellok Посмотреть сообщение
Зачем Вам использовать прег-реплэйс, когда намного быстрее эту работу выполнит str_replace().
потомучто функция str_replace() неработает, выдает ошибку:
Notice: Undefined index: userfile in w:\home\localhost\www\files492\upload.ph p on line 12
[Денвер: показать возможную причину ошибки]
Notice: Undefined index: userfile in w:\home\localhost\www\files492\upload.ph p on line 13
There some errors!
Notice: Undefined index: userfile in w:\home\localhost\www\files492\upload.ph p on line 31

Notice: Undefined variable: des in w:\home\localhost\www\files492\upload.ph p on line 35


вот код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
include("block/connect.php");
 
if(isset($_POST['id'])) {$id=$_POST['id'];}
if(isset($_POST['name'])) {$name=$_POST['name'];}
if(isset($_POST['des'])) {$des=$_POST['des'];}
if(isset($_POST['link'])) {$link=$_POST['link'];}
?>
 
<?php
$uploaddir = './files/';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . 
          str_replace(' ', '_', $_FILES['userfile']['name']))) 
{
    print "Файл отправлен";
        
        printf("<br>Вот переменная: %s", 
        $_FILES['userfile']['name']);
        
        $public_dir=$_SERVER['HTTP_HOST'].'/files';
        echo "$public_dir";
}
 else
{
    print "There some errors!";
}
?>
 
<?php
 
$name = $_FILES['userfile']['name'];
        $link = 'http://'.$_SERVER['HTTP_HOST'].'/files492/files/'.$name;
 
 
    $result = mysql_query("INSERT INTO files (name,des,link) VALUES ('$name','$des','$link')");
if($result=='true') 
    {echo "<p>В базу внесено!</p>";}
else 
    {echo "<p>В базу НЕвнесено!</p>";}
    
    echo $link;
 
?>
может я чтото не так написал???
0
126 / 93 / 18
Регистрация: 09.01.2011
Сообщений: 467
12.01.2011, 18:31
Цитата Сообщение от Sanu0074 Посмотреть сообщение
может я чтото не так написал???
скорее всего, так и есть.
Например, так будет правильнее, и так можно убрать нотайсы:
PHP
1
2
3
4
5
6
7
8
<?php
include("block/connect.php");
 
$id = isset($_POST['id']) ? $id=$_POST['id'] : '';
$name = isset($_POST['name']) ? $name=$_POST['name'] : '';
$des = isset($_POST['des']) ? $des=$_POST['des'] : '';
$link = isset($_POST['link']) ? $link=$_POST['link'] : '';
?>
Цитата Сообщение от Sanu0074 Посмотреть сообщение
Notice: Undefined index: userfile in w:\home\localhost\www\files492\upload.ph p on line 12
[Денвер: показать возможную причину ошибки]
Notice: Undefined index: userfile in w:\home\localhost\www\files492\upload.ph p on line 13
There some errors!
Notice: Undefined index: userfile in w:\home\localhost\www\files492\upload.ph p on line 31
а Вы файл загружать пробовали? Или просто запустили скрипт?
0
 Аватар для Sanu0074
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5
12.01.2011, 18:50  [ТС]
Цитата Сообщение от Dellok Посмотреть сообщение
скорее всего, так и есть.
Например, так будет правильнее, и так можно убрать нотайсы:
PHP
1
2
3
4
5
6
7
8
<?php
include("block/connect.php");
 
$id = isset($_POST['id']) ? $id=$_POST['id'] : '';
$name = isset($_POST['name']) ? $name=$_POST['name'] : '';
$des = isset($_POST['des']) ? $des=$_POST['des'] : '';
$link = isset($_POST['link']) ? $link=$_POST['link'] : '';
?>
а Вы файл загружать пробовали? Или просто запустили скрипт?
Поставил эту функцию в эту часть кода:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
str_replace(' ', '_', $_FILES['userfile']['name']);
$name = $_FILES['userfile']['name'];
        $link = 'http://'.$_SERVER['HTTP_HOST'].'/files492/files/'.$name;
 
 
    $result = mysql_query("INSERT INTO files (name,des,link) VALUES ('$name','$des','$link')");
if($result=='true') 
    {echo "<p>В базу внесено!</p>";}
else 
    {echo "<p>В базу НЕвнесено!</p>";}
    
    echo $link;
 
?>
Теперь, файл грузится с пробелами, и всё отображается на странице(пробелы), а вот в чём запара: функция не меняет ' ' на '_', но зато кидает всё с пробелами, всёже в чем ощибка??? почему не меняет знаки пробела на подчеркивание?
0
126 / 93 / 18
Регистрация: 09.01.2011
Сообщений: 467
12.01.2011, 19:03
напишите
PHP
1
$_FILES['userfile']['name'] = str_replace(' ', '_', $_FILES['userfile']['name']);
перед
PHP
1
move_uploaded_file();
1
 Аватар для Sanu0074
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5
12.01.2011, 19:21  [ТС]
Цитата Сообщение от Dellok Посмотреть сообщение
напишите
PHP
1
$_FILES['userfile']['name'] = str_replace(' ', '_', $_FILES['userfile']['name']);
перед
PHP
1
move_uploaded_file();
теперь пашет, спс
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.01.2011, 19:21
Помогаю со студенческими работами здесь

Переименования файла из контекстного меню
cmd /c (set /A NAME=&quot;%1_%RANDOM%&quot;) &amp; (move /Y &quot;%1&quot; &quot;%NAME%&quot;) Я хочу с помощью Контекстного Меню переименовать файл с другим именем...

Батник для переименования файла
Добрый день, помогите сделать батник. Батник должен переименовывать файл, чтобы имя не повторилось. Пример. есть файл 2354345.NK1...

фуекция sleep
Программирую под Linux g++; Задали задание найти реализацию функции sleep. Нашёл только header unistd.h, там только реализация, где можно...

Батник на поиск текста и переименования файла
Привет всем, Прошу помощи в решении задачи. Задача : есть файлы появляющиеся в папке primer с разными именами...

Не запускается BCB6 - ошибка переименования файла
Ребята,кто сталкивался,C++ Builder установила,при запуске такая ошибка (креплю скрин),как исправить?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru