Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Upload PHP vs FTP
 
 автор: sidPR   (20.08.2005 в 10:36)   письмо автору
 
 


<?
//Тип файлов
$type1 "application/x-gtar"//gtar
$type2 "application/x-tar"//rar
$type3 "application/zip"//zip
$type4 "application/x-zip-compressed"//zip
$type5 "application/x-gzip"//Архив ZIP (PKZIP)



if (($file == $type1) or ($file == $type2) or ($file == $type3))
{
    

$host "IP";
$user "login";
$pass "pass";
$directory "test.rar";



$conn ftp_connect("$host");
if (!
$conn)
{
  echo 
'Ошибка: соединение с FTP-сервером невозможно<br />';
  exit;
}
echo 
"Установлено соединение с $host<br />";
// Регистрация на хосте
$result ftp_login($conn$user$pass);
if (!
$result)
{
  echo 
"Ошибка: пользователь $user не зарегистрирован<br>";
  
ftp_quit($conn);
  exit;
}

#ftp_mkdir($conn, $directory);
#ftp_chdir($conn, $directory);
$upload ftp_put($conn$directory$fileFTP_BINARY);
if (!
$upload)
{
  echo 
"Ошибка: файл  не cоздан<br>";
  
ftp_quit($conn);
  exit;
}
else 
{
    echo 
"файл $directory  cоздан удачно";
}

}
else 
{
                        echo  
"Файл $file не подходит по формату<br>";
                    }





?>


Проблема в том что не могу коректно составить правило для формата Upload пытаюсь зделать разрешение на zip rar по MIME tape на остальное блок/ подскажите в чем ошибка ?

   
 
 автор: cheops   (20.08.2005 в 12:55)   письмо автору
 
   для: sidPR   (20.08.2005 в 10:36)
 

А что содержится в переменной $file?

   
 
 автор: sidPR   (20.08.2005 в 13:14)   письмо автору
 
   для: cheops   (20.08.2005 в 12:55)
 

в переменно файл содержаться исходные данные из формы


<form enctype="multipart/form-data" action="upload.php" method="post">
  <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
  Загрузить файл: <input name="file" type="file">
  <input type="submit" value="Послать файл">
</form>




а код upload.php приведен выше

   
 
 автор: cheops   (20.08.2005 в 13:42)   письмо автору
 
   для: sidPR   (20.08.2005 в 13:14)
 

А нет так не пойдёт, следует воспользоваться суперглобальным массивом $_FILES
<?php
if (($_FILES['file']['type'] == $type1) or ($_FILES['file']['type'] == $type2) or ($_FILES['file']['type'] == $type3)) 
{
?>

   
 
 автор: sidPR   (20.08.2005 в 14:08)   письмо автору
 
   для: cheops   (20.08.2005 в 13:42)
 

почемуто при вставке файла rar пишет ошибку - Файл $file не подходит по формату.
а при вставке к примеру mp3 формата. тоже самое чтото видимо неправильно в синтаксе ? :\

   
 
 автор: cheops   (20.08.2005 в 14:24)   письмо автору
 
   для: sidPR   (20.08.2005 в 14:08)
 

А вы просто распечатайте содержимое массива $_FILES и посмотрите какой тип у него идёт
<?php
  
echo "<pre>";
  
print_r($_FILES);
  echo 
"</pre>";
?>

   
 
 автор: sidPR   (20.08.2005 в 22:11)   письмо автору
 
   для: cheops   (20.08.2005 в 14:24)
 

Отлично понял свою ошибку спасибо огромное за помощь но тут еще небольшой нюанс при оплоуде можно ли щадать свою временную папку и сразу же изменение имени файл на нужное имя?
Заранее огромная благодарность!

   
 
 автор: cheops   (20.08.2005 в 23:08)   письмо автору
 
   для: sidPR   (20.08.2005 в 22:11)
 

Нет, механизм загрузки идёт через временную директорию - следует копировать файлы от туда и не забывать уничтожать временный файл.

   
 
 автор: sidPR   (20.08.2005 в 23:34)   письмо автору
 
   для: cheops   (20.08.2005 в 23:08)
 

нет я в смысле идет загрузка файла в темп а из темп ужэ в окончательную диру вот на этом этапе изменять имя файла .

   
 
 автор: cheops   (21.08.2005 в 00:34)   письмо автору
 
   для: sidPR   (20.08.2005 в 23:34)
 

Да, это является общепринятой практикой, обычно это осуществляют в момент копирования при помощи функции copy()
<?php
    
if (copy($_FILES['attach']['tmp_name'], $_FILES['attach']['name']))
    {
       
// ...
    
}
?>

   
 
 автор: sidPR   (21.08.2005 в 00:47)   письмо автору
 
   для: cheops   (21.08.2005 в 00:34)
 

в моем случае будет правильным так я правильно понимаю?

<?php 
    
if (copy($_FILES['file']['tmp_name'], $_FILES['file']['нове имя файла'])) 
    { 
       
// ... 
    

?> 

заранее спасибо огромное за ваш труд

   
 
 автор: sidPR   (21.08.2005 в 03:53)   письмо автору
 
   для: sidPR   (21.08.2005 в 00:47)
 

как мне в функции $directory оставлять то расширение какое было при загрузке чет непойму подскажите дураку... заранее спасибо

   
 
 автор: sidPR   (21.08.2005 в 04:45)   письмо автору
 
   для: sidPR   (21.08.2005 в 03:53)
 

вопрос снят я зделал так

<?
$auto 
"audi TT";

//Тип файлов

$type1 "application/x-gtar"//gtar
$type2 "application/x-tar"//rar
$type3 "application/zip"//zip
$type4 "application/x-zip-compressed"//zip
$type5 "application/octet-stream"//Архив ZIP (PKZIP)



if (($_FILES['file']['type'] == $type1) or ($_FILES['file']['type'] == $type2) or ($_FILES['file']['type'] == $type3) or ($_FILES['file']['type'] == $type4) or ($_FILES['file']['type'] == $type5)) 
 




$name $_FILES["file"]["name"];    
 

$host "ip";
$user "log";
$pass "pass";
#$directory = "";



$conn ftp_connect("$host");
if (!
$conn)
{
  echo 
'Ошибка: соединение с FTP-сервером невозможно<br />';
  exit;
}
echo 
"Установлено соединение с $host<br />";
// Регистрация на хосте
$result ftp_login($conn$user$pass);
if (!
$result)
{
  echo 
"Ошибка: пользователь $user не зарегистрирован<br>";
  
ftp_quit($conn);
  exit;
}

#ftp_mkdir($conn, $directory);
#ftp_chdir($conn, $directory);


 
 

 


$upload ftp_put($conn$name$fileFTP_BINARY);
if (!
$upload)
{
  echo 
"Ошибка: файл  не cоздан<br>";
  
ftp_quit($conn);
  exit;
}
else 
{
    echo 
"архив $name  cоздан удачно и загружен на $host";
}

}
else 
{
                        echo  
"Файл $file не архив<br>";
                    }

 



?>


вопрос только вот в чем все создаеться все конектиться но на этапе

$name = $_FILES["file"]["name"];

непойму как зделать переиминовку файла из tmp думаеться так

copy($_FILES['file']['tmp_name'], $_FILES['file']['newname']);
    $name = $_FILES["file"]["name"];


но чтото видимо нетак посаветуйте :(

   
 
 автор: cheops   (21.08.2005 в 12:18)   письмо автору
 
   для: sidPR   (21.08.2005 в 04:45)
 

Если вы хотите переименовать имя полностью, а не взять то, которое присылает пользователь, то следует писать
<?php
 $newname 
"Новое имя файла.txt";
 
copy($_FILES['file']['tmp_name'], $newname); 
 
$name $newname;
?>

Если необходимо файлу присвоить имя, назначенное пользователем, то код должен выглядеть следующим образом
<?php
 copy
($_FILES['file']['tmp_name'], $_FILES['file']['newname']); 
 
$name $_FILES['file']['newname'];
?>

   
 
 автор: sidPR   (21.08.2005 в 18:37)   письмо автору
 
   для: cheops   (21.08.2005 в 12:18)
 

а всетаки как для моуго случая зделать чтобы переиминовывался входной файл
и на выходе на ftp диру менял имя не меняяя расширения а то получаеться и в темпах чтобы неостался помагите пожалуйста

   
 
 автор: sidPR   (22.08.2005 в 00:08)   письмо автору
 
   для: sidPR   (21.08.2005 в 18:37)
 

я зделал таким образом:


<?

$ext 
strrchr($_FILES['file']['name'], ".");
$newname "test$ext"
copy($_FILES['file']['tmp_name'], $newname); 
$name $newname;

?>

Но tmp файл сохраняеться как в папке где находиться скрипт так и в папке куда ему указанно созраняться.

Вопрос - Как избежать этого. и есть ли вариант проще ?

   
 
 автор: cheops   (22.08.2005 в 01:29)   письмо автору
 
   для: sidPR   (22.08.2005 в 00:08)
 

Хм.. что-то не очень понятно, данный скрипт должен загружать файлы в текущую папку... если требуется явно указать путь - следует исправить значение переменной $newname
<?php
  $newname 
"files/test$ext";
?>

Правильно ли я понял, одна функция copy() делает две копии?

   
 
 автор: sidPR   (22.08.2005 в 01:32)   письмо автору
 
   для: cheops   (22.08.2005 в 01:29)
 

Нет у меня из админ панели идет аплоуд файла название FILE конектиться к фтп и создает прямо в корне ftp сервера файт вот при создании точнее перед я хочю его переиминовать но все попытки неудаються нормально это зделать!
вот на этом этапе все происходит :

$upload = ftp_put($conn, $directory, $file, FTP_BINARY); 
if (!$upload)


$directory а точнее ужэ $name после наших попыток изменить имя

   
 
 автор: sidPR   (22.08.2005 в 14:41)   письмо автору
 
   для: sidPR   (22.08.2005 в 01:32)
 

не ужели никто не вкурсе как это зделать?

   
 
 автор: cheops   (22.08.2005 в 20:37)   письмо автору
 
   для: sidPR   (22.08.2005 в 14:41)
 

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

   
 
 автор: sidPR   (23.08.2005 в 00:17)   письмо автору
 
   для: cheops   (22.08.2005 в 20:37)
 

cм. вложение .
Все работает имя и расширение присваиваеться какое я задал но непонятно
1. Создает файл там где находиться сам скрипт что мне очень непонятно!
2. Создает файл на фтп сервер так и должно быть и нигде более.
3. Посоветуйте может можно както модифицировать изменение имени на лету?

   
 
 автор: cheops   (23.08.2005 в 00:42)   письмо автору
 
   для: sidPR   (23.08.2005 в 00:17)
 

Всё правильно файл помещается в директории, где расположен сам скрипт благодаря строке
<?php
  $newname 
"test$ext"
?>

Если вы хотите изменить путь, например поместить файл в директорию files, следует изменить данную строку на
<?php
  $newname 
"files/test$ext"
?>

   
 
 автор: sidPR   (23.08.2005 в 01:12)   письмо автору
 
   для: cheops   (23.08.2005 в 00:42)
 

а мне его ненадо некуда помещять!!! кроме как на фтп а если вы говорите

<?php 
  $newname 
"files/test$ext"
?> 

то как организовать помещение на фтп хотя ниже он соединяеться и запись делает

   
 
 автор: cheops   (23.08.2005 в 01:37)   письмо автору
 
   для: sidPR   (23.08.2005 в 01:12)
 

А вас смущает, что около скрипта остаётся копия файла? Тогда после функции ftp_put() просто удалите его при помощи функции unlink
<?php
  unlink
($name);
?>

   
 
 автор: sidPR   (23.08.2005 в 01:42)   письмо автору
 
   для: cheops   (23.08.2005 в 01:37)
 

все я зделал обошелся двумя строками !
:)

$ext = strrchr($_FILES['file']['name'], ".");
$name = "новое имя ";

$upload = ftp_put($conn, $name.$ext, $file, FTP_BINARY);
if (!$upload)


а я мудрил сам исправился :)) спасибо за поддержку! :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования