-
PHP: FAQ
Вот решил заняться разработкой небольшого файлового менеджера на PHP.
Для получения файлов в директории используется scandir() (введен со времен PHP5). Только вот как просортировать массив scandir() так, чтоб он директории выдавал сначала, а потом только файлы? Сейчас он все выдает по алфавиту и все получается смешанным и довольно непонятным (особенно, если файлов и директорий сильно много). Кто может реально помочь, отзовитесь.
-
чтото мне подсказывает параметр context использовать
но не проще было бы PEAR гонять ?
-
в PEAR я к сожалению полный ноль...
-
а еще полезно читать пхп мануал )
посомтри что там снизу написано в форуме
php.net/scandir
-
[QUOTE=swast]а еще полезно читать пхп мануал )
посомтри что там снизу написано в форуме
php.net/scandir[/QUOTE]
так мануал у меня есть, там только про необязательный параметр sorting order только сказано. А он такого эффекта, какой надо не дает.
Еще вопрос: как реализовать загрузку файлов непосредственно в базу данных Mysql? Надо ли тип таблиц ставить в BINARY? И как потом получить доступ к этим файлам?
-
1. Можно и без scandir прекрасно все реализовать
2. Не нужно хранить в базе файлы, лучше только ссылки на них
3. Посмотри как устроены другие менеджеры, скриптов много. В помощь тебе phpclub.ru/talk, php.com.ua/forum, sitepoint.com, hotscripts.com и конечно же google
Кстати, первый же коммент в мануале по scandir показывает, как можно получить массив директорий и файлов. Потом можешь выводить их как тебе нравится :)
-
Срочно нужны php/mysql программисты!!! Может у кого-то есть знакомые.Присылайте Ваши резюме на англ.языке на [email][email protected][/email]
[url]www.vtronline.net[/url]
-
[QUOTE=commando]1. Можно и без scandir прекрасно все реализовать
2. Не нужно хранить в базе файлы, лучше только ссылки на них
3. Посмотри как устроены другие менеджеры, скриптов много. В помощь тебе phpclub.ru/talk, php.com.ua/forum, sitepoint.com, hotscripts.com и конечно же google
Кстати, первый же коммент в мануале по scandir показывает, как можно получить массив директорий и файлов. Потом можешь выводить их как тебе нравится :)[/QUOTE]
спасибо, уже сам разобрался.
просто надо было использовать 2 цикла foreach для массива scandir():
в первом отображаются ТОЛЬКО директории в алфавитном порядке (is_dir());
во втором отображаются ТОЛЬКО файлы в алфавитном порядке (!is_dir() или is_file());
на счет файлов в БД:
как тогда работает система загрузки вложений на этом форуме? ведь все грузится непосредственно в базу...
-
[QUOTE=V.T.R.]Срочно нужны php/mysql программисты!!! Может у кого-то есть знакомые.Присылайте Ваши резюме на англ.языке на [email][email protected][/email]
[url]www.vtronline.net[/url][/QUOTE]
еще только учусь...
а что надо спрограммировать?
-
[QUOTE=V.T.R.]Срочно нужны php/mysql программисты!!! Может у кого-то есть знакомые.Присылайте Ваши резюме на англ.языке на [email][email protected][/email]
[url]www.vtronline.net[/url][/QUOTE]
<< Мы работаем ежедневно с 8.30 утра до 22.00 вечера без выходных
Какаой КАМИКАДЗЕ к Вам пойдет работать?
-
[QUOTE=pavlentus]<< Мы работаем ежедневно с 8.30 утра до 22.00 вечера без выходных
Какаой КАМИКАДЗЕ к Вам пойдет работать?[/QUOTE]
это такое на сайте написано? (не могу посмотреть, т.к. доступа нема).
-
[QUOTE=NoXX]это такое на сайте написано? (не могу посмотреть, т.к. доступа нема).[/QUOTE]
Как не смешно но факт. :search:
-
а как узнать, сколько времени выполнялся скрипт?
в мануале нашел set_time_limit(), но он только ограничивает время выполнения...
-
[QUOTE=NoXX]а как узнать, сколько времени выполнялся скрипт?
в мануале нашел set_time_limit(), но он только ограничивает время выполнения...[/QUOTE]
очень просто. берёшь дату в милисекундах в начале скрипта. потом её же в понце скрипта. разница твоё время в милисекундах. помойму в php есть что-то типа microtimer.
пример на java. В принципе на php что-то подобное
long first = (new Date()).getTime();// это в начале
long second = (new Date()).getTime();// это в конце
out.println(((double)(second-first))/1000);// это выводит время в секундах
надеюсь помог.
точно не скажу, но в настройках php выставляется время по истечении которого скрипт аварийно закрывается.
А по поводу конторы - так они и в выходные работают :rzhu_nimagu:
а еще они занимаются [QUOTE]Сборка компьютеров от произв[COLOR="Red"]а[/COLOR]дителя[/QUOTE]
-
с предыдущей проблемой кое-как разобрался, но вот новая:
нужно измерить скорость соединения путем определения времени закачки файла на комп клиента.
есть такой код:
[php]<title>Тест скорости соединения</title>
<form name="form1" method="post" action="speed.php">
<h3 align="center">
<h3 align="center">Тест скорости соединения (download speed)</h3>
<p align="center"><span style="font-size:10pt;"><font face="Verdana">Выберите размер тествого файла: </font></span><select name="size" size="1">
<option selected value="256">256 kb</option>
<option value="512">512 kb</option>
</select></p>
<p align="center"><input type="submit" name="formbutton1" value="Принять!"></p>
</form>
<?php
if($_POST['size'] == '256')
{
$usec1 = microtime(1);
readfile("test256k");
$usec2 = microtime(1);
$exec_time = $usec2-$usec1;
$size_in_kbit = 2048;
$size_in_kb = 256;
$speed_in_kbits = $size_in_kbit/($exec_time/1000000);
$speed_in_kbs = $size_in_kb/($exec_time/1000000);
ob_start();
echo "Ваш IP: {$_SERVER['REMOTE_ADDR']}<br><br>";
echo "Размер тестового файла = 256 КБайт.<br>";
echo "СКОРОСТЬ (kb/s) = ", bcpow($speed_in_kbs, 1, 2), "<br>";
echo "СКОРОСТЬ (kbit/s) = ", bcpow($speed_in_kbits, 1, 2), ".";
}
elseif($_POST['size'] == '512')
{
$usec1 = microtime(1);
readfile("test512k");
$usec2 = microtime(1);
$exec_time = $usec2-$usec1;
$size_in_kbit = 4096;
$size_in_kb = 512;
$speed_in_kbits = $size_in_kbit/$exec_time;
$speed_in_kbs = $size_in_kb/$exec_time;
echo "Ваш IP: {$_SERVER['REMOTE_ADDR']}<br><br>";
echo "Размер тестового файла = 512 КБайт.<br>";
echo "СКОРОСТЬ (kb/s) = ", bcpow($speed_in_kbs, 1, 2), "<br>";
echo "СКОРОСТЬ (kbit/s) = ", bcpow($speed_in_kbits, 1, 2), ".";
}
?>[/php]
, но он пихает этот бинарный файл (test256k или test512k) в браузер, что абсолютно не нужно. Функции очищения буфера вывода ессно не помогают, а при использовании других функций получения файла скорость выходит около 10~700 МБ/сек и это через IrDA... кто может реально помочь - отзовитесь...
-
я смотрю, сегодня все программеры отдыхают...
-
и такой вопрос - какой посоветуете небольшой бесплатный PHP-редактор, чтоб был с хорошей подсветкой кода и всякими другими прибомбасами (для Винды ессно)(Dreamweaver не предлагать - сильно тормозит)?
-
PHP - редактор...Eclipse.
-
PHP Designer 2007 как вариант.
-
Вложений: 1
в приложении скрипт на javaScript. им можно загрузить с броузера страницу с сервера. Как потом вернуть данные о скорости хз.
ИМХО лучше делать измерение скорости на стороне клиенте.
ЗЫ Всех с НГ.
ЗЫЫ хотя этот явовский скрипт выбирает всю инфу в переменную. Если отобразить только последние н-ное количество байт то будет нахис.
-
NoXX: не интересовался как организованно на этом форуме, но вполне возможно, что есть таблица типа attachments, в которой инфа типа id аттачмента, id сообщения, и имя файла. А сами аттачменты загружаются в специальную для этого папку. Потом при пролистывании сообщений в теме просматриваются аттачменты, и если какие-то из них относятся к сообщениям - они добавляются. Нет смысла хранить их в базе, гораздо удобнее хранить ссылки на файлы
-
[QUOTE=commando]NoXX: не интересовался как организованно на этом форуме, но вполне возможно, что есть таблица типа attachments, в которой инфа типа id аттачмента, id сообщения, и имя файла. А сами аттачменты загружаются в специальную для этого папку. Потом при пролистывании сообщений в теме просматриваются аттачменты, и если какие-то из них относятся к сообщениям - они добавляются. Нет смысла хранить их в базе, гораздо удобнее хранить ссылки на файлы[/QUOTE]
не скажи... сам у себя поставил vbulletin - файлы хранятся в БАЗЕ под типом таблицы BLOB...
-
не знаю зачем им это понадобилось. Не вижу приемуществ.
-
Единообразие бэкапаи интегральная целостность.
но насколько я помню там можно было выбрать в базе или файлами.
или это был не vbull а efiction...
склерозь.
^_^
-
не подскажете, где можно найти репозиторий с классами распаковки RAR и ZIP-архивов?
-
<<Единообразие бэкапаи интегральная целостность
кому как нравится...
NoXX: pear.php.net - тут множество разных классов
-
еще такой вопрос:
есть такой код:
[php]<h1 align='center'>URL-Upload</h1>
<center><form action='urlupload.php' method='post'>
URL: <input type='text' name='url' value='http://'><input type='submit' value='Отправить!'></form>
<?php
if(!empty($_POST['url']))
{
$str = parse_url($_POST['url']);
if($str['scheme'] == 'http')
{
$file_name = basename($str['path']);
$newfilename = explode(".", $file_name);
if(copy($_POST['url'], "httpuploads/$newfilename[0].zzz"))
{
print "Файл загружен успешно!<br>URL: <a href='./httpuploads/$newfilename[0].zzz'>$newfilename[0].zzz</a>";
}
else
{
print "Файл не удалось загрузить!";
}
}
}
?>
</center>[/php]
Заливаю, значит на свой хостинг ho.com.ua, а там любой URL выдает "Permisson Denied" при попытке его "копирования" на мой хост. Права на доступ все установил. Если не трудно, проверьте, плиз, на своем хостинге, может хоком закрыл доступ на исходящий траффик?
allow_url_fopen разрешен в инишнике.
ЗЫ: не забудьте создать папку httpuploads и установить для нее права 0777.
-
смотри чтобы тебе не загрузили какой-нибудь delete_all.php
-
[QUOTE=commando]смотри чтобы тебе не загрузили какой-нибудь delete_all.php[/QUOTE]
и не смогут - все файлы после загрузки имеют расширение *.zzz, что делает невозможным их выполнение на сервере... а что можешь сказать по поводу этой ошибки?
-
[quote]после загрузки имеют расширение *.zzz[/quote]
не усмотрел.
По теме:
попробуй еще раз проверить права папки, у тебя urlupload.php и папка точно на одном уровне лежат? я сейчас проверил локально и на серваке - все работает. И кинь мне pm с линком - посмотрю
-
ХЕХ стока интересных темок затронуто :)
Поповоду хранить файлы в таблице - из своего опыта скажу шо это довольно таки геморно т.к. БД получается очень большая. Сам работал с БД в которой хранились фотки в БЛОБ полях весила просто жуть и как тут уже обсуждалось сделать единовременный бекап сложновато и весит он мама негорюй :) Залить его обратно проблематично.
По поводу "смотри чтобы тебе не загрузили какой-нибудь delete_all.php".
Проверяй mime-тип файла при загрузке, получить можно так $_FILE['имя_поля']['type'].
И вообще почитай в любой инфе по php как правильно загруать файлы, потому как у тебя их можно грузить тока если они уже находятся в интернете шо немного неудобно :)
В качестве редактора могу посоветовать PSPad очень класный редактор.
-
по поводу редакторов - мне нравится phpDesigner(win) и eclipse(linux).
Я тоже считаю что держать файлы в таблицах - плохой тон. Можно на phpclub'е найти много тем по поводу этого.
-
для единообразия можно предложить eclipse(win) и eclipse(linux)
-
файлы грузятся в мускул непосредственно, если тип данных указан как BLOB (LONGBLOB, и т.п.).
-
[QUOTE=NoXX]и такой вопрос - какой посоветуете небольшой бесплатный PHP-редактор, чтоб был с хорошей подсветкой кода и всякими другими прибомбасами (для Винды ессно)(Dreamweaver не предлагать - сильно тормозит)?[/QUOTE]
Far c colors-ом "proto-php"
очень приятная подсветка кода
-
теперь такой вопрос (может не совсем по теме):
почему на ОС FreeBSD 6.2 не выполняется через ПХП прога WGet, скомпиленная для FreeBSD 6.0? при этом никаких предупреждений не выдается.. если интересно, то вот адрес: [url]http://dimm.ho.com.ua/index.php[/url]
исполняемый файл проги: /virt/homes/dimm/htdocs/bin/wget
-
Вопрос вот в чем. А зачем тебе понадобилось выполнение WGET из скрипта? Не проще ли воспользоваться CURL ? Запуск wget из скрипта... Не вижу в этом абсолютно никакого смысла.
По поводу распаковки. На мой взгляд:
ZIP:
[url]http://www.phpconcept.net/pclzip/index.en.php[/url]. Часто использую распаковку отдельного файла в строку (для выборки метаданных из JAR файлов)
RAR:
[url]http://pecl.php.net/package/rar[/url]. Тоже очень удобно.
Ну и по мелочам...
Сам пользую вот уже несколько лет ZDE как среду разработки и отладки. Для профилирования и изучения поведения скриптов - только XDebug+WinCacheGrind, альтернативы на мой взгляд нет. Для сексуальных отношений с мускулем - Navicat. Поддерживает юникод, не тормозит, мощный генератор отчетов, на мой взгляд лучше чем EMS и подобные.
Использовать фар для написания софта вообще бредятина, так же как и редакторы не имеющие возможностей отладки. В таких редакторах вы затратите больше времени на отладку нежели используя нормальный дебаггер и профайлер.
Использовать XDebug и подобные для профилирования и детального изучения выполнения скрипта рекомендую всем кто уже осознал (цитата: "берёшь дату в милисекундах в начале скрипта. потом её же в конце скрипта.") или готов понять, что замерение миллисекунд выполнения скрипт - бред и не дает никакой пользы. Используйте нормальное профилирование, только так можно найти узкие места и тормоза.
Файлы хранить в мускуле имхо бред в большинстве случаев, разве что превью (или небольшие по размерам файлы) можно так хранить, и то желательно все выборки файлов кешировать. Почему бред. Потому, что объемы таблиц возрастают. И это отнють не правила хорошего тона - не использовать BLOB. Все зависит от конкретных задач. В моем случае таблица файлов насчитывает сотни тысяч записей с ссылками на 3-5 файлов превью. Соответственно, храня эти файлы в базе - увеличивается размер базы, не так удобно восстанавливать базу при сбое из дампа-бекапа. На скорость использование BLOB практически никак не отражается за cключением времени на отгрузку данных скриптом выдачи файла. Вляет местоположение сервера базы данных, если пхп и база на одном сервере, то вполне можно использовать хранение файлов в BLOB при небольшом кол-ве записей. По поводу целостности данных, имхо бред, хранение файлов в репозитории с хранение виртуальных ссылок на них в мускуле вполне может быть 100% целостным и нерушимым решением в случае если и то и другое стабильно бекапится.
-
[QUOTE]Вопрос вот в чем. А зачем тебе понадобилось выполнение WGET из скрипта? Не проще ли воспользоваться CURL ? Запуск wget из скрипта... Не вижу в этом абсолютно никакого смысла.[/QUOTE]
если бы он еще был вкомпилен в бинарик пхп и корректно работал..
-
на хокоме такие умники, что и на readfile() закрыли доступ с ЮРЛ-ов.. думал сделать некое "зеркало", чтобы через него можно было качать любые файлы с инета под любыми расширениями (нужна такая штука для обхода firewall'а)..
-
[quote]на хокоме такие умники[/quote]
а зачем тебе убогие сервера? Никто не разрабатывает проекты на перегруженных shared'ах со злыми админами. Если хочешь вести свои испытания не локально, купи себе план hostproc.com.ua - и стоит копейки, и настроено все нормально. А тратить время на скрипты, которые будут обходить убогие настройки, нерационально