20 Апрель 2009

Eclipse и удаленные проекты (sftp)

eclipse.png В веб-разработке часть бывает, что проект (PHP в моем случае) находится не у вас на жестком диске, а на удаленном веб-сервере. Например, несколько человек работают над проектом, у каждого своя рабочая копия кода, в своей директории на веб-сервере. Многие рабработчики используют Eclipse и заинтересованы в том, чтоб работать в нем и над удаленными проектами. Я пробовал найти SFTP-плагин, но все те несколько, что я ставил - работать неудовлитворительно. Есть другой отличный способ в Linux - подмаунтить sftp директорию с помощью Fuse, а в Eclipse добавить новый проект.

Команды буду писать для Ubuntu (для Fedora то же самое, только вместо aptitude - yum ;) )

Ставим пакет sshfs:
$ sudo aptitude install sshfs

Добавляем пользователя в группу fuse (если ее нет после установки fuse, то создайте - sudo groupadd fuse):
$ sudo adduser yourusername fuse

Создайте директорию, в которую вы будете маунтить удаленные файлы (например /mnt/remote):
$ cd /mnt
$ sudo mkdir remote

Не забудьте сделать эту директорию доступной для вашего пользователя:
$ sudo chown yourusername /mnt/remote

Теперь вы можете подмаунтить удаленные файлы (не под root, а под своим пользователем):
$ sshfs remoteusername@remoteserver:/path/on/remote/server /mnt/remote

введите свой пароль (к удаленному серверу)

После завершения работы не забудьте размаунтить:
fusermount -u /mnt/remote

В Eclipse создайте новый PHP-проект и укажите, что его файлы находятся в /mnt/remote. Теперь вы можете работать над проектом, как над локальным.

рубрики: PHP, Разработка, Софт | Комментарии (5)

7 Январь 2009

PHP - проверка файла на наличие / существование

Порой мы отображаем на сайтах контент с других ресурсов: картинки или фавиконы. Некоторе браузеры просто оставят пустое место (Firefox), другие же отобразят уродский прямоугольник, явно указывая, что чего-то не хватает (IE). Как же можно средствами PHP проверить существование файла.

Есть функция file_exists(), но она хороша только для файлов в пределах нашей файловой системы, а с удаленным сервером не пройдет.

Есть вариант открывать файл на чтение и в случие ошибки констатировать факт, что файла не существует:

PHP:
  1. <?
  2. // файл, который мы проверяем
  3. $url = "http://url.to/favicon.ico";
  4.  
  5. // пробуем открыть файл для чтения
  6. if (@fopen($url, "r")) {
  7.     echo "Файл существует";
  8. } else {
  9.     echo "Файл не найден";
  10. }
  11. ?>

Однако такой прием занимает достаточно много времени.

Есть вариант еще лучше - использовать функцию get_headers():
Читать полностью »

рубрики: PHP, Разработка | Комментарии (4)

11 Декабрь 2008

Пагинация на PHP

Частенько приходится разбивать контент на сайтах постранично и выводить "менюшку" со списком номеров страниц, плюс ссылочки для перехода на предыдущую, следующую, первую и последнюю страницы.

С этим можно справиться таким кодом:

PHP:
  1. <?php
  2. $itemscount=123; // количество элементов (статей)
  3. $itemsperpage=10; // кол-во эл-в на странице
  4. if (isset($_REQUEST['page']))
  5.     { $cpage=$_REQUEST['page']; }
  6.     else { $cpage=1; }
  7. // если странца не задана, то будем на 1й
  8. $pagescount=ceil($itemscount/$itemsperpage); //кол-во страниц
  9. if ($cpage>1) {
  10.     // первая
  11.     echo '<a href="?page=1"><<</a> ';
  12.     // предыдущая
  13.     echo '<a href="?page='.($cpage-1).'"><</a> ';
  14. }
  15. if ($stpage>1) echo '... ';
  16. for ($i=$stpage;$i<=$endpage;$i++) {
  17.     if ($i==$cpage) { echo '<strong>'.$i.'</strong> '; }
  18.     else { echo '<a href="?page='.$i.'">'.$i.'</a> '; }
  19. }
  20. if ($endpage<$pagescount) echo '... ';
  21. if ($cpage<$pagescount) {
  22.     // след.
  23.     echo '<a href="?page='.($cpage+1).'">></a> ';
  24.     // последняя
  25.     echo '<a href="?page='.$pagescount.'">>></a> ';
  26. }
  27. ?>

Такой код хорош, если у вас страничек 5, но вот если их количество значительное, то намного приятнее будет смотреться что-что вроде:

<< < ... 10 11 12 13 14 15 16 ... > >>

Сейчас мы его "сбацаем"
Читать полностью »

рубрики: PHP, Разработка | Комментарии (5)

21 Ноябрь 2008

Два 2-х ноября

Писал цикл по дням в PHP. Есть переменные $f и $t, в которых начало и конец временного отрезка в SQL формате. У меня заданы начало: 2008-10-28 и конец 2008-11-10.
есть цикл, в котором к timestamp текущей даты прибавляет количество секунд в сутках:

PHP:
  1. $cur=$f; // цикл по $cur. вначале в ней $f
  2. preg_match("/([0-9]{4})-([0-1]{1}[0-9]{1})-([0-3]{1}[0-9]{1})/",$cur,$matches); // разбиваем строку с датой
  3. $curts=mktime(0,0,0,$matches[2],$matches[3],$matches[1])// получаем timestamp для начальной даты в 00:00:00
  4. while ($cur<=$t) {
  5.     echo "cur:".$cur."|t:".$t." (".$curts.")<br />"; // выводим текущую дату в цикле и конечную, timestamp текщей даты
  6.     $curts+=24*60*60; // увеличиваем на сутки timestamp
  7.     $cur=date("Y-m-d",$curts);

В итоге у меня на выводе получалось два 2-х ноября. Я долго смотрел в код с круглыми глазами, не понимая как такое может быть.

Потом догадался, тчо это от того, что 2-го ноября в штатах переводили часы, то есть через 24 часа от 00:00:00 2-го ноября было не 00:00:00 3-го, а 23:00:00 все того же второго ноября.

Фикс заключается в том, тчоб взять начальный timestamp посередине дня

PHP:
  1. $curts=mktime(12,0,0,$matches[2],$matches[3],$matches[1])// получаем timestamp для начальной даты в 12:00:00

Будьте бдительны, коллеги! :)

рубрики: PHP | Комментарии (3)

19 Июнь 2008

SVN - быстрый старт (how-to руководство)

Недавно я решил наконец-то начать использовать систему контроля версиями и выбрал (Subversion). Он изначально был установлен на моем Linux Fedora, но вы можете и сами легко установить его на своей системе Fedora используя команду yum install subversion или найти RPM subversion.

Теперь хочу поделиться с вами небольшим мануалом по быстрой настройке, и не буду рассказывать, что же такое SVN и как он работает, будем считать, что вы знакомы в теории с ним и хотите наконец-то быстро попробовать его в работе. Объяснять буду на примере.
У меня есть PHP проект в /var/www/html/docs/haibuy. У Apache есть Virtualhost haibuy. Мой IP в локальной сети 192.168.1.7.
Читать полностью »

рубрики: PHP, Разработка | Комментарии (7)

16 Май 2008

Круговая диаграма на PHP с использованием GD

Часто данные приходится отображать в наглядном для пользователя виде, а именно с помощью диаграм. Одним из видов диаграм является круговая, где за каждый элемент отвечает свой сектор.
Напишем функцию, которая стоит такую диаграму используя библиотеку GD для PHP. В качестве входных параметров ассоциативный массив $ar ($ar['имя']=данные;) и $title для заголовка диаграмы.
Читать полностью »

рубрики: PHP | Комментарии (5)

15 Май 2008

Простой whois на PHP

PHP дает нам возможность запускать команды операционной системы, используя например функцию exec(). Попробуем ее, написав простой whois сервис. Whois - это *nix комманда, которая показывает информацию о домене. Также мы можем проверить, свободен домен или нет. Удостовертесь, что ваш провайер включил exec(). Обычно эта функция запрещена ( находится в параметре disable_functions в php.ini). Также попробуйте, работает ли whois нормально на вашем сервере. Я пробовал скрипт на Apache 2, PHP 5, Linux Fedora 8 и все было ОК.

Читать полностью »

рубрики: PHP | Комментарии (4)

14 Май 2008

Скрипт проверки баланса в SAPE

Вашему вниманию представляется простой скрипт проверки состояния вашего счета в SAPE. Скрипт на PHP с использованием curl. Сценарий логинится в системе и "выдирает со страницы" небольшой блок слева с информацией о доходе, расходах, балансе.

Читать полностью »

рубрики: PHP | Комментарии (5)