- 19/03/2012 2:00 am -
eZ Publish on Windows server 2008 and Oracle 11g
Hello everybody,
Reading this title is very strange for me ! I never thought of writing an article on eZ Publish, Windows and Oracle !
But, the customer is the king and for several reasons, sometimes, we have to install specials architectures.
First, I must say, that it's not a good advice to install eZ Publish on Windows, my advice is to install it on Linux!
The choice of the database implementation is more complicated, personnaly I like MySQL but Postgres is good too. (Oracle? why not, but if you have reals reasons and money)
End of this introduction, let's you enter into a new world.
I'm not a Windows expert, and this article shows the point of view of a Linux user.
1. Windows and Oracle Installation
Windows OS installation is not very funny, so I will skip this part.
And, happy me, I only had to install eZ Publish over an existing Oracle database 11g.
I think an Oracle installation is a real big work, it can't be resumed simply, so I will skip this too. I only want to explain the eZ Publish installation.
2. PHP and Internet Information Server 7.x
2.1 IIS 7
eZ Publish Community 2012.2 can run on IIS 7 and PHP5 (http://doc.ez.no/eZ-Publish/Technical-manual/4.6/Installation/Requirements-4.6).
As you know, eZ Publish needs somes rewrite rules, so you will have to install the Microsoft URL Rewrite Module 1.1.
2.1.1 Installation
The IIS 7 installation begins with : Control panel > Get programs, and you can add "Internet Information Server".
This step is really simple and quick.
2.1.2 Configuration
When it's finished, configure the default site to set the DocumentRoot of your eZ Publish installation.
Create a new file index.html in you DocumentRoot in order to test your webserver : http://localhost. (localhost, I assume that you are working on the Windows web server)
The next step is the installation of the Microsoft URL Rewrite Module 1.1 : double click and proceed this installation.
Don't be impatient, you will add the RewriteRule for eZ Publish later.
Note: I'm not a expert on Windows, but at this time, I searched where to set the IIS user. I didn't find this information.
I had some rights problems during my entire installation, but I think they are related to the security policies of the company.
2.2 PHP 5
2.2.1 Installation
When IIS 7 is running, you need to install PHP (5.3.10 for now). Here, you can download the Window Installer (.msi) of the thread safe version.
When you install this msi, choose the IIS Fast CGI mode.
Concerning the extensions, choose as you want.
If, like me, you want to install eZ Publish with Oracle, you have to install oci8 driver but choose the mysqli driver too. (I will explain later why)
2.2.2 Configuration
Now, you can create a index.php with a phpinfo() to see your PHP installation configuration.
At this time, you would change the php.ini parameters for your server, but, it's not so easy !
I don't know why but my changes in the php.ini had no effect. After some research on my best friend Google, I installed a new module on IIS "PHP Manager". It saved my life !
Through this manager, I could change the php.ini configuration correctly.
Note: It's very strange on Windows, the PHP Manager gave me a path for the php.ini (the same path as in the phpinfo()), but when I modified this file manualy, it didn't change anything.
Double check this configuration with a php.exe -i in the command line.
Note: If some things are strange don't hesitate to restart some services like
- FastCGI settings
- PHP Manager
- IIS
- The OS (if you want to be sure)
Note: I'm sad to say that but we are on Windows...
2.3 PHP - Oracle
2.3.1 Database driver installation
The Oracle database installation was already done. But on the web server, there was neither the oracle client, nor the good library.
As this time, when I launched the php.exe in a command line I had this error : "OCI8.DLL not found". Later on, I found I have the same in the PHP error log.
As described in the eZ Oracle installation documentation, the Oracle Instant Client must be installed on the webserver.
Even if your OS is in 64bit mode, you have to download the Instant Client for Microsoft Windows (32-bit), because PHP for Windows works only in 32bit mode.
Follow the installation instructions and don't forget to correctly change your PATH variable environment.
3. eZ Publish with eZ Oracle 2.x
eZ Systems provides an extension eZ Oracle to handle the Oracle database implementation. The documentation is very clean and usefull.
Be careful when you download the package. The documentation shows a link to http://projects.ez.no/ezoracle, but on this project, there is a important note ( at the bottom of the page) to go on Github.
Finally, with eZ Publish Community 2012.2 use eZ Oracle 2.3 and download it directly from Github : https://github.com/ezsystems/ezoracle
3.1 Installation
My mission was to install an new eZ Publish on this architecture.
3.1.1 Fisrt way, but is not the good one for me
The eZ Oracle setup instructions explains how to install the extension, import the eZ schema and the eZ data.
But after that, you have to continue the eZ Publish installation process manually. You can't use the standard installation process using the browser (Mail, Databases, languages, siteaccess settings etc…)
And you have to install the imported packages manually too. (ezwebin, ezflow etc...)
I first tried this method, but I canceled.
Now, I know the second method works perfectly, I advise you to use it.
3.1.2 Second way
It's more easy when you come from Linux to install a new eZ Publish on your Linux. (5-20 minutes max).
So I do a new installation on Linux, Apache, and MySQL on my Debian virtual machine.
At this time, my task wasn't to install an new eZ Publish but to migrate an existing one to Windows and Oracle. So, I just had to :
- move the eZ Publish files from my Linux installation to the Windows DocumentRoot
- quick install the eZ Oracle on this eZ Publish
- unpack in extension directory
- in override/site.ini.append.php add ActiveExtensions[]=ezoracle in ExtensionSettings section
- regenerate the autoloads ( php bin/php/ezpgenerateautoloads.php -e)
- migrate the MySQL database to the Oracle database.
The last step can be complicated ! But no, eZ Oracle include a script to do that perfectly !
Note: Naturally, you can do that without installing MySQL on you Windows Server. The MySQL server on your virtual machine will do the job.
3.2 Migrate from your LAMP installation
3.2.1 Files
You just have to copy all files and be careful about the rights.
3.2.2 Rewrite Rules
It's time to install the Rewrite Rule.
To do that, simply add this file : web.config into the DocumentRoot. Like a .htaccess file, IIS will read it.
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <defaultDocument> <!-- Set the default document --> <files> <remove value="index.php" /> <add value="index.php" /> </files> </defaultDocument> <rewrite> <rules> <rule name="Rest API" stopProcessing="true"> <match url="^api/" ignoreCase="false" /> <action type="Rewrite" url="index_rest.php" /> </rule> <rule name="Treemenu" stopProcessing="true"> <match url="^([^/]+/)?content/treemenu.*" ignoreCase="false" /> <action type="Rewrite" url="index_treemenu.php" /> </rule> <rule name="Direct access resources" stopProcessing="true"> <match url=".*" ignoreCase="false" /> <conditions logicalGrouping="MatchAny"> <add input="{URL}" pattern="var/([^/]+/)?storage/images(-versioned)?/" ignoreCase="false" /> <add input="{URL}" pattern="var/([^/]+/)?cache/(texttoimage|public)/" ignoreCase="false" /> <add input="{URL}" pattern="design/[^/]+/(stylesheets|images|javascript)/" ignoreCase="false" /> <add input="{URL}" pattern="share/icons/" ignoreCase="false" /> <add input="{URL}" pattern="extension/[^/]+/design/[^/]+/(stylesheets|flash|images|lib|javascripts?)/" ignoreCase="false" /> <add input="{URL}" pattern="packages/styles/.+/(stylesheets|images|javascript)/[^/]+/" ignoreCase="false" /> <add input="{URL}" pattern="packages/styles/.+/thumbnail/" ignoreCase="false" /> <add input="{URL}" pattern="var/storage/packages/" ignoreCase="false" /> </conditions> <action type="None" /> </rule> <!-- Makes it possible to placed your favicon at the root of your eZ Publish instance. It will then be served directly. --> <rule name="Faviconrewrite" stopProcessing="true"> <match url="^favicon\.ico$" ignoreCase="false" /> <!-- Uncomment the line below if you want you favicon be served from the standard design. You can customize the path to favicon.ico by replacing design/standard/images/favicon.ico by the adequate path. --> <!--<action type="Rewrite" url="design/standard/images/favicon.ico" />--> <action type="None" /> </rule> <rule name="Favicon" stopProcessing="true"> <match url="^design/standard/images/favicon\.ico$" ignoreCase="false" /> <action type="None" /> </rule> <!-- Give direct access to robots.txt for use by crawlers (Google, Bing, Spammers..) --> <rule name="Robots" stopProcessing="true"> <match url="^robots\.txt$" ignoreCase="false" /> <action type="None" /> </rule> <!-- Uncomment the following lines when using popup style debug. --> <!--<rule name="Debug" stopProcessing="true"> <match url="^(.*)$" ignoreCase="false" /> <conditions logicalGrouping="MatchAny"> <add input="{URL}" pattern="var/cache/debug\.html" ignoreCase="false" /> <add input="{URL}" pattern="var/[^/]+/cache/debug\.html" ignoreCase="false" /> </conditions> <action type="None" /> </rule>--> <!-- Platform for Privacy Preferences Project ( P3P ) related files for Internet Explorer More info here : http://en.wikipedia.org/wiki/P3p --> <rule name="P3P" stopProcessing="true"> <match url="^w3c/p3p\.xml$" ignoreCase="false" /> <action type="None" /> </rule> <rule name="Everything else"> <match url=".*" ignoreCase="false" /> <action type="Rewrite" url="index.php" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
3.2.3 Database
I assume you have already an Oracle database with the good eZ Oracle requirements.
The eZ Oracle documentation explains how to migrate from MySQL, I will only explain these commands :
Note: Unusually on eZ Publish, you have to run this command in the extension/ezoracle/bin/php directory.
php mysql2oracle-schema.php YOURMYSQLDB:mysqluser/mysqlpassword@YOURLAMPMySQLSERVER --drop > mydump.sql
This command dumps your MySQL schema from your MySQL server (in my case my virtual machine).
You can now understand why we needed to install the mysqli driver at the php installation step. (Your Windows server has to connect to a MySQL server)
You have to load this file into the Oracle database. You can do that using SQLPlus or the client of your choice (like TOAD, or Navicat)
Using SQLPlus :
sqlplus oracleuser/oraclepassword@ORCL < mydump.sql
Note: In my case ORCL was ORACLESERVER_HOST/ORACLEDATABASE_NAME
When the dump is imported into your Oracle database, the last steps are very simple.
Migrate the data :
php mysql2oracle-data.php YOURMYSQLDB:mysqluser/mysqlpassword@YOURLAMPMySQLSERVER oracleuser/oraclepassword@ORACLESERVER_HOST/ORACLEDATABASE_NAME
Update the sequences :
php ora-update-seqs.php oracleuser/oraclepassword@ORACLESERVER_HOST/ORACLEDATABASE_NAME
Final steps :
- Configure the override/settings/site.ini.append.php's DatabaseSettings section
[DatabaseSettings] DatabaseImplementation=ezoracle User=oracleuser Password=oraclepassword Database=ORACLESERVER_HOST/ORACLEDATABASE_NAME
- Clear the cache
php bin/php/ezcache.php --clear-all
Enjoy your eZ Publish !
Conclusion
This tutorial comes from my notes and I think I didn't forget anything.
Even if this installation works, my advice will always be to install eZ Publish on Linux.
I didn't make any benchmark, but I think the performances will always be better on Linux.
But, If one day you have to do this installation I hope this article will help you ;-)
Plop+
- 10/03/2012 4:41 pm -
Plopix Blog, the Plopix strikes back !
Salut à tous,
C'est fait ! Voici mon nouveau blog fraîchement sorti après deux semaines de vacances en Guadeloupe. On peut dire qu'il a été créé dans le Cloud (en avion ou en plein Jet Lag ;))
Alors, évidemment, vous voyez bien que le désign ressemble à un réseau social assez connu ! Mais je me suis dit que copier sur quelque chose qu'on apprécie et toujours un bel hommage. D'autant, que ce n'est pas une copie mais une reproduction ! J'ai découvert de nouvelles techniques Gimp en voulant faire le logo, j'ai un peu joué aussi avec les media queries et le HTML5 mais c'est pas trop mon fort etc..
Du coté serveur on retrouve mon CMS préféré eZ Publish dans sa dernière version communautaire avec un Varnish 3 tout vide pour le moment.
Pour refaire ce blog, j'ai fait un mix up de plein de blogs que j'apprécie que vous retrouverez sur la droite dans la rubrique "My Community". (Merci à vous)
J'avoue que je n'ai quand même pas trop d'idée sur le contenu de la home page du site (pas du blog), aujourd'hui j'ai mis une remontée de flux Twitter cela changera peut être !
Par contre j'apprécie bien ma page d'erreur.
J'ai essayé d'être social aussi, Facebook, Twitter, Google Plus, Foursquare, et Gmaps.
Concernant la langue, je vais essayer d'être international ! Alors il y aura sûrement plein de billets en anglais, soyez indulgent ;-) (il faut que progresse de toute façon, les critiques seront aussi les bienvenues)
Au niveau du contenu, je vais essayer d'être plus régulier, voire utiliser un peu le blog comme pense-bête de choses simples mais importantes.
Donc sur ces belles paroles : See you soon !
- 22/10/2007 3:30 pm -
eZ Keywords Nodes
Cette extension ajoute une fenêtre de contrôle appelé : "Keywords Nodes". Elle ajoute un emplacement à un noeud avec une simple SelectBox préconfigurée en fonction de l'identifiant de classe, l'arborescence et/ou des noeuds. Elle créée une sorte de nouveau concept, les mots-clés de noeud... Lisez la suite pour plus de détails ;)
Description :
Ma motivation était de simplifier le système de multipositionnement, le système d'ajout d'emplacement. Pour de nombreux client, la méthode "Ajouter un emplacement" est trop lourde et pas forcément facile à comprendre. Le fait de devoir se ballader dans l'arborescence n'est pas toujours apprécier.
Avec cette extension, vous pourrez définir une sélection de noeuds, une arborescence de noeuds qui seront des mot-clés, ou plutôt des "Keywords Nodes",des mots-clés de noeuds. L'affectation d'un mot-clé sur un noeud se traduit par un ajout d'emplacement mais de manière transparent pour l'utilisateur.
Par exemple, pour un blog, si vous avez différents "Tags". Pour faire un jolie nuage de tags, il y a différentes possibilités :
- datatype Keywords
- datatype Object relations
- datatype Related Object
et l'ajout d'emplacement.
Je pense que l'ajout d'emplacements est la meilleur solution car vous pourrez faire un export RSS de vos différents "Tags", compter facilement le nombre de billets avec tel ou tel "Tag" etc..
Donc, il vous faut rajouter des emplacements dans des noeuds spécifiques.Il est compliqué/long/lourd d'écrire son billet puis de rajouter des emplacements. Même si eZ peut vous permettre d'ajouter les emplacements dans le mode édition, il faut quand même parcourir l'arborescence et ça reste long.
Maintenant il y a l'extension : "Keywords Nodes" ;)
Installation :
- Télécharger l'archive de la contribution et décompressé la dans le répertoir extension.
- Activer l'extension dans le siteaccess de l'admin dans la section [ExtensionSettings] du site.ini ajouter
- ActiveAccessExtensions[]=keywords_nodes
Configuration :
La fichier de configuration est : keywords_nodes.ini
#La fenêtre de contrôle sera afficher que sur les noeuds avec les identifiants de classes suivant. [ClassesIdentifier] identifier[]=weblog #Cette section définit l'arborescence et les noeuds qui seront des "Keywords Nodes" (En fait les emplacements de destination) #GlobalSubtreeDisplaySkipDepth définit les niveaux de l'arborescence à sauter pour l'affichage du path des mots-clés dans le selecteur [TopKeywordsNode_weblog] subtree[]=67 subtree[]=68 nodes[]=65 GlobalSubtreeDisplaySkipDepth=2 #Cette section définit la profondeur des "Keywords Nodes" dans le cas d'une subtree, de la section TopKeywordsNode [SubtreeDepth_weblog] subtree[67]=2 subtree[68]=1 #Cette section définit le type des "Keywords Nodes" [KeywordsContainerClasse_weblog] classes[]=folder
Ces trois dernières sections peuvent être dupliqués pour définir des règles pour d'autres class_identifier
NOTE: Cette extension surcharge les templates :
- window_controls.tpl
- windows.tpl
Il y a deux traductions de faite : FR et EN.
Téléchargement :
- 14/02/2007 3:31 pm -
eZpublish Template code for Zend Studio
Un petit fichier XML qui définit plusieurs gabarits pour Zend Studio.
Description
Dans le contexte HTML de Zend Studio, cette contrib définit :
eZattribute_view_gui
ezCacheBlock
eZdef
eZfetch
eZfetch_content_list
eZfetch_content_node
eZforeach
eZforeachSequence
eZhref
eZhttp
eZi18n
eZif
eZimage
eZinclude
eZini
eZlet
eZsection
eZsectionLoopSequence
eZsetblock
ezSwitch
eZwhile
Installation :
Dans Zend Studio : Tools > Preferences > Templates
--> Importer le fichier XML
Et si vous rajouter des gabarits je pense que tout le monde les voudra volontiers ! ;)
Téléchargement :
http://projects.ez.no/ezpublish_template_code_for_zend_studio
- 16/05/2006 1:19 pm -
PHP 6 - Les changements et les nouveautés...
Alors que PHP5 commence seulement a rentrer dans les mœurs. On entends déjà parler de PHP 6.. Quels sont les changements et les nouveautés de prévu.
Je vais vous présenter les gros changements et nouveautés qui sont pour moi intéressantes.
Support Unicode en natif
Il va y avoir dans cette version, un support unicode en natif que l'on pourra activer ou non dans le php.ini. Le fait de l'activer nous offrera un panel de fonctions (natives elles-aussi) pour gérer l'encodage.
Donc, normalement plus de problème d'encodage, notament je pense que cela pourra servir pour l'Ajax qui envoie forcément ces requête en UTF-8.
Plusieurs fonctionnalités nettoyées
Register Globals, Magic Quotes et Safe Mode
Ces fonctionnalités dont on entend toujours et encore parler pour cause de sécurité vont être tout simplement supprimées. Quand elles seront détectées dans le php.ini il y aura une E_CORE_ERROR de générer.
Pour moi ça c'est tant mieux, y en a marre du code pourri que donne les gens qui codent avecregister_globalsetMagic Quotecependant fini la compatilité ascendante. Cependant, pourSafe Modeon pourrait croire que ça ne va pas contribuer au développement de PHP6 chez les hébergeurs qui utilisent souvent leSafe Modeavece l'optionopen_basedir, et bien l'optionopen_basedirsera garder!
De la même manière lesregister_long_arrays, HTTP_*_VARSvont être supprimés.
PECL
Pour les gens qui ne savent plus ou pas ce qu'est PECL :
PECL est un dépôt d'extensions PHP qui vous sont disponibles via le système de paquet PEAR.
Toutes ces extensions peuvent biensûr être compilé en static dans php ;)
Donc plusieurs extension vont être déplacé dans PECL notament toutesles "non-PDO" DataBases(mysql,mysqli etc...) etEreg. Et par ailleurs, d'autres vont être intégrées commeXMLReader et XMLWriteretFileInfo.
En fait, PHP6 va nous pousser à utiliser PDO qui est une bonne chose je pense.
Les ajouts
Les entiers de 64Bits
Ca peut toujours servir ;)
Goto
En fait c'est une extension de break qui permettra d'envoyer vers un label (Moi ça me rend nostalgique ça, je pense à mes cours d'Assembleur jadis...)
Un petit exemple :
<?php for ($i = 0; $i < 9; $i++) { if (true) { break blah; } echo "not shown"; blah: echo "iteration $i\n"; } ?>
ifsetor()
C'est carément bien ce nouvel opérateur :
<?php /* SI $plop est setter, alors $foo recevra $plop, sinon 42 lui sera assigné . */ $foo = ifsetor($plop, 42); ?>
Mais, ils ne sont pas encore d'accord sur l'implémentation... donc on verra bien.
Syntaxe multi-dimensionnel pour Foreach
Ca aussi c'est trop bien :
<?php $a = array(array(1, 2), array(3, 4)); foreach( $a as $k => list($a, $b)) { print " "; } ?>
{} vs []
Pour vous simplifier tout, les {} seront dépréciés au profit des [], on pourra faire notamment :
<?php /* Pour les strings et les arrays, [] marchera âvec substr()/array_slice() : * [2,3] =elements (or characters) 2, 3, 4 * [2,] = elements (or characters) 2 jusqu'à la fin * [,2]= elements (or characters) 0, 1, 2 * [,-2] = du début jusqu'au dernier moins deux valable pour un array/string * [-3,2] pareil que pour substr etarray_slice() On pourra faire par exemple : * $str = "foo"; $str[] = "d"; concaténation * $str = "fo"; $str[] = "od"; => "food" * $str = ""; $str[] = "d"; devrait valloir "d" */ ?>
Fonctionnalités du mode Objet
Appel automatique du constructeur
Quand on étend une classe de PDA par exemple, le constructeur parent serait appellé intuitivement..
Espaces de noms
Comme en Java est dans n'importe langage objet digne de ce nom, es NameSpaces arrivent avec PHP
Méthodes Static
PHP5 l'autorisait, PHP6 non ! Enfin !!! Il sera maitenant imossible d'appeller une méthode static en mode dynamique et inversement. Une E_FATAL sera générée.
Toutes les non-Fatales erreurs pourront devenir des exceptions
Et bien NON, ils ne le feront pas... mais je le signale pour vous donner la solution à cette super idée ;)
<?php function error_handler($errorType, $message) { if ($errorType == E_NOTICE) { throw new Exception( $message, $errorType); } } set_error_handler('error_handler'); // Throws a notice echo $new; ?>
Conclusion
Je pense que tous ces changements vont le faire, on voit vraiment un changement dans cette version, PHP6 ce détache vraiment, bien plus que PHP5. Bien que le mode Objet ne soit pas encore parfait, on y vient! Moi il me manque la surcharge de méthodes comme en JAVA pour être aux anges ;)
Vivement ça sortie...
- 28/04/2006 12:15 am -
FluXML : eZ syndication XML
C'est une extension qui permet de syndiquer les objets Ez.
Elle fournit un plus par rapport à la syndication RSS, en autre, elle permet d'exporter une classe spécifique avec ou non son arborescence, et surtout elle permet de syndiquer les attributs.
Description
Cette extension permet un export XML d'une classe en particulier. (Tester sur EzPublish 3.6.1) Elle fournit un module d'administration qui va donner la possibilité de définir des syndications XML.
On peut donc spécifier plusieurs choses :
- Le nom du flux.
- La description du flux.
- Le site qui fait référence au flux.
- Une image qui fait référence au flux.
- La possibilité d'activer/désactiver le flux.
- La possibilité d'indiquer l'ID du node parent de chaque objet.
- La possibilité de choisir la fin de l'URL d'accès du flux.
- L'ID du node source qui servira de racine pour l'export.
- La classe de du type d'objet exporté.
- Les champs que l'on veut exporter enredéfinissant les balisesqui leur correspond.
Ensuite le flux est accessible à l'url d'accès.
Installation
Décompresser l'extension dans le répertoire extension.
Une fois cela fait il faut activer l'extension dans le fichier site.ini du siteaccess FRONT et BACK office.
Il faut rajouter une table dans la base de données :
CREATE TABLE `FLUX_xml` ( `flux_identifiant` varchar(255) NOT NULL DEFAULT '', `flux_name` varchar(255) DEFAULT NULL, `flux_description` text, `flux_url_site` varchar(255) DEFAULT NULL, `flux_is_actif` tinyint(3) DEFAULT NULL, `flux_for_arbo` tinyint(3) DEFAULT NULL, `flux_source_node` int(11) DEFAULT NULL, `flux_arbo_fille` tinyint(3) DEFAULT NULL, `flux_class_identifier` varchar(255) DEFAULT NULL, `flux_champs` text, `flux_image` varchar(10), `flux_date_lastmodif` datetime DEFAULT NULL, PRIMARY KEY (`flux_identifiant`) );
Il faut aussi rajouter une régle de réécriture dans les virtualhost correspondant aux siteaccess :
RewriteRule fluxml/syndicate~(.*)$ fluxml/syndicate?id=$1 [PT]
Il reste une chose à faire, lister les classes que vous permettez d'exporter, ceci ce fait dans le fichier flux.ini du répertoire setting de l'extension.
[ClassesExportables] identifier[]=folder identifier[]=article
Améliorations possibles
Je pense que les Master eZ Publish amélioreront l'input qui permet de renseigner l'id du noeud source.
Un peut d'Ajax ne ferait pas de mal à la sélection des classes
Mais surtout un système de mise en cache des flux générés pourrait vraiment optimiser les syndications...
Téléchargement
Sur site officiel d'eZ Publish dans les contributions









