Просмотр полной версии : [php] скипт загрузки
Привет, может ли кто-то показать на простом примере скрипт скачивания файла любого типа, и GIF типа, сделанный на PHP.
кто не понял, это как на dump.ru
$img=file_get_contents("http://адрес к картинке");
$f=fopen("имя_картинки","w+");
fwrite($f,$img);
fclose($f);
тип того.
вместо file_get_contents можно использовать это (http://forum.antichat.ru/showpost.php?p=834303&postcount=427) .
я наверное не так объяснил, я имел ввиду, что загрузку с копма на сервер.
на вот читай: _ttp://www.softtime.ru/scripts/upload.php
ооо спасибо:) а ты не подскажеш еще как что бы можно было файлы одного типа только загружать, ну или только картинки:)
.:EnoT:.
27.08.2008, 00:00
ну банально так:
<?php
$type = 'jpg';
if(stristr($_FILES['filename']['type'], $type))
echo 'Ok';
else echo 'пшол вон';
?>
ооо спасибо:) а ты не подскажеш еще как что бы можно было файлы одного типа только загружать, ну или только картинки:)
Нужно создать массив из расширений приемлемых для загрузки, ну и помудрить с примером выше -)
форма
<form action="upload.php" method=post enctype=multipart/form-data>
<input type=file name=uploadfile>
<input type=submit value=Загрузить></form>
upload.php
<?php
$uploaddir = './files/';
$uploadfile = $uploaddir.basename($_FILES['uploadfile']['name']);
if (copy($_FILES['uploadfile']['tmp_name'], $uploadfile))
{
echo "<h3>Файл успешно загружен на сервер</h3>";
}
else { echo "<h3>Ошибка! Не удалось загрузить файл на сервер!</h3>"; exit; }
echo "<p><b>Ccылка на фаил: <a href='files/".$_FILES['uploadfile']['name']."'>скачать</a>";
?>
ну я наверное не так объяснил опять:) там когда обзор идёт, что бы там были видны только фото.
ну как тут:
_http://xs.to/xs.php?h=xs230&d=08352&f=999999999928.jpg
с помощью js наверно
PS. смотри исходный код http://xs.to там всё есть :)
.:EnoT:.
27.08.2008, 00:32
ну я наверное не так объяснил опять:) там когда обзор идёт, что бы там были видны только фото.
ну как тут:
_http://xs.to/xs.php?h=xs230&d=08352&f=999999999928.jpg
лично у меня все файлы обзорит..тем более что мешает юзеру нажать на меню и вместо графических файлов выбрать "все файлы"...ты думаешь это панацея? нет...
Делай массив, как подсказал тебе n-000
2.:EnoT:. выбери пункт "Multiple Files". я не против, но мне просто самому инетеснно как это делать, потому я и спросил, а вдруг когда-то пригодится:)
Тоесть ты хочеш зделать загрузку разных файлов, а где то отображать только фото ?
++Norton++
11.09.2008, 22:56
Такой вопрос. Попробовал скрипт rushter'a upload.php (он на предыдущей странице). Все работает отлично. Только вот вопрос. Какие права нужно поставить на каталог в который загружается файл, чтобы, например, если загрузят php-файл, он не исполнялся, а только скачивался? Ставил chmod 666 но тогда пишет ошибку и не загружает файл:
Warning: copy(./upload/best.c) [function.copy]: failed to open stream: Permission denied in /var/www/localhost/htdocs/upload.php on line 4
Хотя вроде chmod 666 как раз для этого...
как вариант запретить upload php скриптов
++Norton++
12.09.2008, 00:01
Если можно поподробнее, как это лучше сделать?
imajo.ati
12.09.2008, 17:35
Если можно поподробнее, как это лучше сделать?
читать файл построчно и искать строку '<?php'
хоть медленно зато 100% эффективно, если short_open_tag = Off и asp_tags = Off
.htaccess:
RemoveType application/x-httpd-php .php .php5 .phtml
winstrool
18.09.2008, 12:02
вот пост на котором есть код для загрузки изображений, по сути дела им можно загружать любые файлы, но для этого надо его чуток подредактировать
http://forum.antichat.ru/threadedpost865021.html#post865021
FileFusian v1.6 http://slil.ru/26159398
в свое время наткнулся на этот скрипт, перерабатывал под себя, настраиваться 5 минут
MasterMushi
19.09.2008, 13:08
В свое время я задался проблемой аплода кучи файлов на сервер. Все бы хорошо, вот только хотелось грузить по 10-20 файлов за раз. Было это нужно для создания картинной галереи и материала было очень много. Также хотелось чтобы картинки были с хорошо измененными именами сразу поставлены на регистрации в базу.
Первое с чем столкнулся - не каждый хостинг имеет инициализированной на фришном плане переменной $_ENV['tmp'] что в результате при любом использовании $_FILES выдает пустой результат. Второе - не было изначально задано папки на которую вела бы эта самая переменная. Папка и переменная нужны для сохранения временных файлов которые мы еще не обработали и не скопировали куда нужно.
Третье - это папка назначения. Такую папку на время аплода нужно chmod-ить до 766 а после аплода ставить возможность исполнения файлов (тоесть чтобы по клику на ссылку с картинкой картинка не выдавалась как ошибка доступа 403) опять таки не каждый фришных хостинг отрабатывает
Ну и последнее - масс аплоад. Поискав по сети я не нашел вразумительных обьяснений. Сделал проще - отработал форму как с массивом в динамике. Вот пример того что получилось:
<body><table border="0" cellpadding="0" cellspacing="2" align="left" >
<tr valign="top"><td width="100"> </td>
<td>
<?php
$Gallery_root='gallery/'; // Задаем пусть к директории для сохранения результата
//error_reporting(E_ALL); // Эта строка нам поможет при отладке проблем с настройками сервера Как только все заработает - убираем нафиг
if (!empty($_POST["startupload"])) // Проверяем была ли кликнута кнопка начала загрузки
{
echo '<font style="font-size: 12px;">';
require_once('db.php'); // Запрашиваем класс для работы с базой данных
require_once("config.php");
$db_uploader = new DB($host,$user,$password,$database); //подключаемся к базе
if (!$db_uploader->open()) // Если не удалось то отваливаемся с ошибкой-описанием неудачи
{ die ($db_uploader->error());}
$fuploads=1; // Счетчик загружаемых файлов
chmod($Gallery_root, 0777); //ставим права скрипту чтобы он мог подгрузить картинки
while ($fuploads <= $_POST["toupload"]) // Пока мы не отработали все файлы которые пришли с формы делаем следующее....
{
$ufilename='file'.$fuploads; // Тут мы делаем имя для каждого поля динамической формы
if (!empty($_FILES[$ufilename]["name"])) // Если поле формочки не была пустыи и в нго запихнули файл тогда
{
if (!is_uploaded_file($_FILES[$ufilename]['tmp_name'])) { // Проверяем хорошо ли был загружен файл
echo "File ".$_FILES[$ufilename]["name"]." had not been Uploaded<br>";} //Если нет тогда пишем о неудаче
else { // А если файл был загружен на ура тогда делаем следующее
if($_FILES[$ufilename]["size"] > 1024*3*1024) //Проверяем трехмеговый лимит размера файла (хостинги некоторые требуют)
{
echo ("File size exceeds maximum allowed (3.0Mb"); //И отваливаемся если перебор
}
else
{ $finfilename=md5($_FILES[$ufilename]["tmp_name"]); //Кодируем шаблон на имя файла в чтото хешевое
$finext=explode(".",$_FILES[$ufilename]["name"]); // Разбиваем загруженный файл на имя и расширение
$finfilename=$finfilename.'.'.$finext[1]; //Убираем старое имя и складываем новое имя и расширение
if(move_uploaded_file($_FILES[$ufilename]["tmp_name"],$Gallery_root.$finfilename)) // Перемещаем загруженный файл в галлерею
{
$sql_qwery = "insert into images_table (image_filename, uploaded_time, gallery_id) values ('".$finfilename."',".strtotime("now").", 0)";
/*запрос тут для примера
images_table - табличка в базе у которой 4 поля
gallery_id - это айди в таблице с галлереями на которую назначим картинку для начала назначим ноль потом назначим все что надо
все остальное делается так:
create table images_table
(
id int unsigned not null auto_increment primary key,
image_filename char(50)
gallery_id int unsigned,
uploaded_time int unsigned
)
все достаточно просто.
*/
if (!$db_uploader->query($sql_qwery)) //Собственно делаем запрос на регистрацию загруженой картинки в базу
{ echo ' <font color="#880000"><b>Failed:</b> New image adding error</font><br>'; //При ошибке в регистрации отваливаемся
die ($db_uploader->error()); };
//Пишем что и куда мы запихнули
echo 'File: <b>';
echo $_FILES[$ufilename]["name"];
echo '</b> ( ';
echo $_FILES[$ufilename]["type"];
echo ', ';
echo $_FILES[$ufilename]["size"];
echo "b) was uploaded to".$Gallery_root;
echo ' as <b>';
echo $finfilename;
echo "</b><br> \n";
} else //теперь в случае если картинку не удалось загрузить мы пишем об этом
echo ' <font color="#880000"><b>Failed:</b> image upload error</font> Name: '.$_FILES[$ufilename]["name"].' <br> Temp name: '.$_FILES[$ufilename]["tmp_name"];
}
}
}
$fuploads++; //Докидываем +1 к счетчику загруженных файлов
}
chmod($Gallery_root, 0555); //Снимаем права с директории до состояния "Разрешено пользоваться но не изменять"
// После трудной работы класса БД мы грохаем обьект. if ($db_uploader){$db_uploader->freeresult();$db_uploader->close();}
echo '</font><br>';
}
?>
</td></tr>
<tr valign="top"><td width="100"> </td>
<td>
<font class="hilight">How many files do you want to upload?</font>
<form action="index.php?page=galleryuploader" method="post">
<table border="0" cellpadding="0" cellspacing="2" align="left">
<tr>
<td class="content" align="left" width="50">
Range 1-30
</td>
<td>
<input name="fcount" type="text" style="width:140px"
<?php
$fcount=10; //Число полей по умолчанию
if (!empty($_POST["fcount"])) //Проверяем было ли задано новое число полей
{ $fcount=$_POST["fcount"]; //Если да то выставляем новый параметр в счетчик
if (($fcount > 0) && ($fcount < 31))
echo 'value="'.$fcount.'"';
else echo 'value="10"';
}
else echo 'value="'.$fcount.'"';
?>>
</td>
<td>
<input type="submit" name="setnumber" value=" Set " style=" border-width:1px; color:#626754; background:#FFFFFF">
</td>
</tr>
</table>
</form>
<br><br>
<font class="hilight">Chose files from you PC</font>
<form action="index.php?page=galleryuploader" method="post" enctype="multipart/form-data">
<table class="content" width="270" height="12" border="0" cellpadding="0" cellspacing="1" bgcolor="#eeeeee" valign="top">
<tr>
<td align="center" bgcolor="#cccccc">###</td>
<td align="center" bgcolor="#cccccc">Local file path</td>
</tr>
<?php
$fcount=10; // Перестраховываемся по значению количества полей по умолчанию
if (!empty($_POST["fcount"])) //Если задано новое количество
$fcount=$_POST["fcount"]; //Назначаем
if (($fcount < 1) || ($fcount > 30)) $fcount=10;
//Но не более 30ти файлов за раз (некоторые хостинги вообще только до 20ти файлов отрабатывают а некоторые и вообще по 2)
$ucounter=1; //Счетчик для генерирования имен полей
while ($ucounter <= $fcount)
{ //Пока не достигли предела разрешенного количества полей
echo '<tr valign="center"><td width="70" class="content" align="left"> File ';
echo $ucounter;
echo ':</td><td><input type="file" name="file';
echo $ucounter; //гененрируем поля с именами попорядку
echo '" id="upload_field"></td></tr>'."\n";
$ucounter++; //+1 к счетчику сгенерированных имен полей
}
?>
<tr><td> </td><td align="left">
<input type="hidden" name="toupload" value="<?php echo $fcount;?>">
<input type="submit" name="startupload" value=" Upload " style=" border-width:1px; color:#626754; background:#FFFFFF; width: 185px;"></td>
</tr>
</table>
</form>
</td></tr>
</table>
</body>
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot