Разбиране на инсталирането на PHP библиотека

Опитвам се да разбера опциите и терминологията, свързани с „инсталиране“ на PHP библиотеки на система (Linux/OSX)

Ето някои конкретни точки, които се опитвам да обхвана:

  1. Какво означава „инсталиране“, когато се отнася до PHP библиотеки?
  2. Каква е разликата между библиотеки и разширения?
  3. Как се вписва php.ini?
  4. Как се вписва PEAR?
  5. Как импортирате/включвате библиотеки?
  6. Ако създам своя собствена библиотека, какъв е най-добрият начин да я пакетирам и разпространявам?

Благодаря - и съжалявам за многото части...


person Yarin    schedule 09.12.2010    source източник
comment

Не мога да позная какво прави SearchTemplate, но вие прилагате проекцията към външните критерии вместо към отделения.

Също така "основните" критерии трябва да са за TravelPlan, а не за Ticket.

С други думи:

criteria = DetachedCriteria.For<TravelPlan>()
               .Add(Subqueries.PropertyNotIn(
                        "UserId",
                        DetachedCriteria.For<Ticket>()
                            .SetProjection(Projections.Property("UID"))))

Това предполага, че TravelPlan има свойство UserID, което съответства на свойството UID в Ticket.

  -  person eykanal    schedule 09.12.2010


Отговори (2)


Няколко точки...

PHP няма собствена инфраструктура за „импортиране“, като python, java или .net. Има няколко начина, по които библиотеките могат да се използват в PHP.

  1. компилирайте ги в PHP двоичния файл. Това е най-напредналият начин и обикновено не е желателен, освен ако нямате много специални нужди.

  2. Инсталирайте ги като PHP модули на сървъра и ги включете в PHP.ini. От гледна точка на PHP програмиста, тези разширения са част от PHP -- винаги налични. Просто е по-лесно да ги добавяте и премахвате, без да се налага да създавате отново самия PHP.

  3. Инсталирайте PHP код някъде на сървъра и го включите() във вашия PHP скрипт.

  4. Запазете копие на библиотека във вашия проект и го включете във вашия PHP скрипт.

--
На основно ниво кодът е или част от интерпретатора (статичен или динамичен), или е обикновен стар PHP код, който е включен()ен във вашия проект.

За вашите цели мога само да ви предложа да се придържате към стандартна дистрибуция на PHP (изберете добра операционна система Linux и използвайте нейния PHP). След това почти всички библиотеки, от които ще се нуждаете на ниво преводач, са налични като допълнителни пакети и сложността на това е оставена на тези, които го правят всеки ден.

На RedHat/Centos може да стартирате:

yum install php php-memcached php-gd php-pecl

--
По отношение на всички други видове библиотеки, които може да искате да използвате, най-вероятно е най-добре да приемете добра PHP рамка, която се грижи за всичко това вместо вас.

Някои примери са:

  1. Zend Framework
  2. CakePHP
  3. Codeigniter
  4. http://www.phpframeworks.com/
  5. и т.н...

(не в произволен ред, само тези, които са ми дошли на ум)

При условие, че сте възприели стандартния подход за използване на RPM или подобни за управление на компилираното в аспекти на PHP и разширения, тогава една добра солидна рамка ще се погрижи за включването на целия ви допълнителен код на PHP библиотека, от който се нуждаете.

Крайният резултат е, че се фокусирате върху предоставянето на продукт, а не върху цялата инфраструктура, която иначе би трябвало да научите и измислите.

--
php.ini се анализира и изпълнява при стартиране на PHP (всеки път за команден ред, веднъж на стартиране на сървър в apache). Той определя много настройки, включва много модули, конфигурира тези модули и т.н.

Всъщност можете да замените някои настройки в php.ini с функцията ini_set() в PHP. Това обаче е ефективно само за някои настройки. Други трябва да бъдат зададени преди стартирането на вашия скрипт.

Когато работите под apache, можете да добавите редове към директивите .htaccess и <VirtualHost>, които напълно заместват PHP.ini за тази директория/виртуален хост.

(моля, коригирайте моя синтаксис и премахнете тази бележка, ако е грешна)

<VirtualHost *>
    ServerName www.example.com       
    DocumentRoot /home/joe/site/docroot
    php_value include_path "/home/joe/site/php-code"
</VirtualHost>

--
В отговор на вашия #6 въпрос относно вашата собствена библиотека и най-добрия начин да я опаковате, предлагам ви първо да оцените нуждата от библиотеката. И ако наистина сте на път за нещо, тогава разберете най-често срещания начин, по който хората го правят. Ако това е проста библиотека, тогава .php файл с хубав уебсайт би бил достатъчен.

--
Може би малко безсмислено, но се надявам, че това ви насочва в правилната посока.

person gahooa    schedule 09.12.2010

Всички пряко свързани с PHP:

  1. Обикновено просто копирайте и се уверете, че нещо, което иска да го използва, знае къде се намира.
  2. Разширението обикновено се пише на C и се зарежда от интерпретатора, докато библиотеката обикновено означава собствена PHP библиотека.
  3. Не знам, това, което искате, знайте тук. Ini зарежда разширения и задава някои настройки. Не е пряко свързан с инсталациите, .... Можете да настроите своя път за включване (или нещо подобно) тук.
  4. Можете да инсталирате библиотеки с него ;) Не знам също, това, което искате да знаете.
  5. обикновено require(_once) или include(_once). За класовете можете да настроите автоматично зареждане. Обърнете се към ръководството за PHP.
  6. пакет/архив (zip, gz, tarball, ..) го и направете връзка за изтегляне? Също така: Не знам какво искаш.

Ако искате да пишете PHP библиотеки и искате лесен начин за опаковане и разпространение, тогава погледнете PEAR.

person KingCrunch    schedule 09.12.2010
comment
благодаря, но бихте ли хвърлили светлина върху това защо PEAR би бил по-прост от просто пакетиране ..и създаване на връзка за изтегляне? - person Yarin; 09.12.2010
comment
Инсталацията с круша е на два реда: pear channel-discover mychannel.example.com и pear install mychannel.example.com/MyPackage. Ако нямате сървър за канали (google за pearfarm ;)), можете също да предоставите пакет за изтегляне. След това инсталацията е нещо като pear install MyPackage-x.y.z.tgz (x.y.z зависи от версията на пакетния файл). За да създадете пакети, трябва да напишете package.xml (google за pear package.xml ;)), но когато съществува, това е само кратко pear package за създаване на нов пакет, който след това можете да качите на вашия хост или сървър на канали. - person KingCrunch; 09.12.2010