Загрузка по маске. Вопрос

Статус
В этой теме нельзя размещать новые ответы.

irk

Постоялец
Регистрация
18 Май 2009
Сообщения
91
Реакции
2
Есть вот такой скрипт, который загружает файл на ftp сервер в локалке. Помогите прикрутить фунцию загрузки по маске, то есть чтобы можно было указать какие файлы можно загружать по расширению, остальные нельзя...

PHP:
<?
$path= "АДРЕС FTP СЕРВЕРА";
if(!file_exists($path))
die("<b>Пожалуйста, создайте папку <font color=red>".$path."</font> и <a href=?>повторите попытку загрузить файл</a>.</b>");
if(empty($_FILES['UserFile']['tmp_name']))
echo"<form method=post enctype=multipart/form-data>
Выберите файл для загрузки: <input type=file name=UserFile class='stat'>
<input type=submit class='stat' value=Загрузить>
</form>";
elseif(!is_uploaded_file($_FILES['UserFile']['tmp_name']))
die("<b><font color=red>Файл не был загружен! Попробуйте <a href=?>повторить попытку</a>!</font></b>");
else{
if(@!copy($_FILES['UserFile']['tmp_name'],$path.chr(47).$_FILES['UserFile']['name']))
die("<b><font color=red>Файл не был загружен! Попробуйте <a href=?>повторить попытку</a>!</font></b>");
else
echo "<center><b>Файл \"<font color=red>".$_FILES['UserFile']['name']."\"</font> успешно загружён</font></b></center>"."<hr>".

"<center><b><font color=blue>Ссылка на файл: БЛА-БЛА-БЛА".$_FILES['UserFile']['name']."</font></b></center>"."<hr>".

"Тип файла: <b>".$_FILES['UserFile']['type']."</b><br>".
"Размер файла: <b>".round($_FILES['UserFile']['size']/1024.2)." кб.</b>".
"<hr><center><a href=?>Загрузить ещё один файл!</a></center>";
}
?>
 
используйте для обработки $_FILES['userfile']['type']

лучше использовать такую схему (пример с загрузкой изображений:(
 
  • Нравится
Реакции: irk
t0wer, спасибо!! А как прикрутить к моему коду?((
 
Как то так

<?php
$path= "АДРЕС FTP СЕРВЕРА";
$strpicture="";
if ($_FILES['userfile']['error']>0) {
$strpicture.="Ошибка: ";
switch ($_FILES['userfile']['error']:(
case 1: $strpicture.="размер файла более upload_max_filesize."; break;
case 2: $strpicture.="размер файла более max_file_size."; break;
case 3: $strpicture.="загружена только часть файла."; break;
case 4: $strpicture.="файл не загружен."; break;
endswitch;
} else {
if (($_FILES['userfile']['type']!='image/gif')
and($_FILES['userfile']['type']!='image/jpeg')
and($_FILES['userfile']['type']!='image/png')
and($_FILES['userfile']['type']!='image/pjpeg')) {
echo "Ошибка: файл должен быть: .gif, .jpg или .png";
} else {
if ($_FILES['userfile']['tmp_name']) {
// добавлен блок проверки каталогов
if( !is_dir($_SERVER['DOCUMENT_ROOT'].'/img') ) mkdir($_SERVER['DOCUMENT_ROOT'].'/img');
if( !is_dir($_SERVER['DOCUMENT_ROOT'].'/img/articles') ) mkdir($_SERVER['DOCUMENT_ROOT'].'/img/articles');

if (move_uploaded_file($_FILES['userfile']['tmp_name'],$_SERVER['DOCUMENT_ROOT']."/img/articles/".$_FILES['userfile']['name'])) { // "username" исправлено на "userfile", и добавлено "$_SERVER['DOCUMENT_ROOT']."
$strpicture.="<center><b>Файл \"<font color=red>".$_FILES['UserFile']['name']."\"</font> успешно загружён</font></b></center>"."<hr>".

"<center><b><font color=blue>Ссылка на файл: БЛА-БЛА-БЛА".$_FILES['UserFile']['name']."</font></b></center>"."<hr>".

"Тип файла: <b>".$_FILES['UserFile']['type']."</b><br>".
"Размер файла: <b>".round($_FILES['UserFile']['size']/1024.2)." кб.</b>".
"<hr><center><a href=?>Загрузить ещё один файл!</a></center>";
} else {
$strpicture.="Ошибка: невозможно поместить файл в каталог.";
}
} else {
$strpicture.="Возможна атака через загрузку файла '".$_FILES['userfile']['name']."'.";
}
}
}
$strpicture.="<br/>";

echo $strpicture;

$str="<form action='a1.php' name='uploadForm' method='post' enctype='multipart/form-data'>
<input type='file' name='userfile' />
<input type='submit' value='Загрузить' />
</form>";
echo $str;
?>

Добавлено через 20 секунд
PHP:
  <?php
  $path= "АДРЕС FTP СЕРВЕРА";
  $strpicture="";
  if ($_FILES['userfile']['error']>0) {
    $strpicture.="Ошибка: ";
    switch ($_FILES['userfile']['error']):
      case 1: $strpicture.="размер файла более upload_max_filesize."; break;
      case 2: $strpicture.="размер файла более max_file_size."; break;
      case 3: $strpicture.="загружена только часть файла."; break;
      case 4: $strpicture.="файл не загружен."; break;
    endswitch;
  } else {
    if (($_FILES['userfile']['type']!='image/gif')
    and($_FILES['userfile']['type']!='image/jpeg')
    and($_FILES['userfile']['type']!='image/png')
    and($_FILES['userfile']['type']!='image/pjpeg')) {
      echo "Ошибка: файл должен быть: .gif, .jpg или .png";
    } else {
      if ($_FILES['userfile']['tmp_name']) {
        // добавлен блок проверки каталогов 
        if( !is_dir($_SERVER['DOCUMENT_ROOT'].'/img') ) mkdir($_SERVER['DOCUMENT_ROOT'].'/img');
        if( !is_dir($_SERVER['DOCUMENT_ROOT'].'/img/articles') ) mkdir($_SERVER['DOCUMENT_ROOT'].'/img/articles');

        if (move_uploaded_file($_FILES['userfile']['tmp_name'],$_SERVER['DOCUMENT_ROOT']."/img/articles/".$_FILES['userfile']['name'])) { // "username" исправлено на "userfile", и добавлено "$_SERVER['DOCUMENT_ROOT']."
            $strpicture.="<center><b>Файл \"<font color=red>".$_FILES['UserFile']['name']."\"</font> успешно загружён</font></b></center>"."<hr>".

            "<center><b><font color=blue>Ссылка на файл: БЛА-БЛА-БЛА".$_FILES['UserFile']['name']."</font></b></center>"."<hr>".

            "Тип файла: <b>".$_FILES['UserFile']['type']."</b><br>".
            "Размер файла: <b>".round($_FILES['UserFile']['size']/1024.2)." кб.</b>".
            "<hr><center><a href=?>Загрузить ещё один файл!</a></center>";
        } else {
          $strpicture.="Ошибка: невозможно поместить файл в каталог.";
        }
      } else {
        $strpicture.="Возможна атака через загрузку файла '".$_FILES['userfile']['name']."'.";
      }
    }
  }
  $strpicture.="<br/>";

echo $strpicture;

$str="<form action='a1.php' name='uploadForm' method='post' enctype='multipart/form-data'>
<input type='file' name='userfile' />
<input type='submit' value='Загрузить'  />
</form>";
echo $str;
?>
 
  • Нравится
Реакции: irk
  • Нравится
Реакции: irk
дайте кто-нибудь готовый рабочий скрипт заливки на удаленный ftp..

Тот скрипт что в первом посте льет, но льет файл не целиком, а его кусок процентов на 80...хз почему..
 
Ваш и приведенные мной примеры выше работают через протокол HTTP, а не FTP. Вот эти примеры работают по протоколу FTP.

вот пример 1:

вот пример 2:
 
  • Нравится
Реакции: irk
а как доработать код, чтобы после загрузки выводилась ссылка на загруженный файл?

Вот в этом коде:

и + почему не выводятся сообщения об успешной/неудачной загрузке файла...хотя в коде это есть?

index.html
PHP:
<form action="curlupload.php" method="post" enctype="multipart/form-data">
<div>
<label for="upload">Select file</label>
<input name="upload" type="file" />
<input type="submit" name="Submit" value="Upload" />
</div>
</form>

curlupload.php
PHP:
<?php
if (isset($_POST['Submit'])) {
 if (!empty($_FILES['upload']['name'])) {
     $ch = curl_init();
     $localfile = $_FILES['upload']['tmp_name'];
     $fp = fopen($localfile, 'r');
     curl_setopt($ch, CURLOPT_URL, 'ftp://ftp_login:password@ftp.domain.com/'.$_FILES['upload']['name']);
     curl_setopt($ch, CURLOPT_UPLOAD, 1);
     curl_setopt($ch, CURLOPT_INFILE, $fp);
     curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));
     curl_exec ($ch);
     $error_no = curl_errno($ch);
     curl_close ($ch);
        if ($error_no == 0) {
            $error = 'File uploaded succesfully.';
        } else {
            $error = 'File upload error.';
        }
 } else {
        $error = 'Please select a file.';
 }
}
?>
 
тут два варианта:
1) вы используете функцию чтения файловой директории и формируете таблицу со списком файлов (название, размер, права, ссылка на файл и т.д.)

2) вы при загрузке формируете текстовый файл с данными о загруженных файлах, потом читаете его и формируете таблицу со списком файлов (название, размер, права, ссылка на файл и т.д.)

Первый вариант тяжелее, но точнее. Второй вариант быстрее, но при удалении файла из папки нужно править текстовый файл, чтобы он был на текущий момент актуальным.

Если вам нужна ссылка на только что загруженный файл, то можно при помощи Location из curlupload.php передать название в индексный файл и включив обработчик сформировать на него ссылку. Тогда название файла лучше использовать index.php, а не index.html
Можно вообще все в одном файле сделать, используя сценарий условий
PHP:
if ()
 {
 ...
 }
else
 {
 ...
 }
 
  • Нравится
Реакции: irk
Если вам нужна ссылка на только что загруженный файл, то можно при помощи Location из curlupload.php передать название в индексный файл и включив обработчик сформировать на него ссылку. Тогда название файла лучше использовать index.php, а не index.html

именно так и нужно, помогите реализовать, если не сложно...
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху