<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le blog de Michauko &#187; php</title>
	<atom:link href="http://michauko.org/blog/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://michauko.org/blog</link>
	<description>Si tu ne comprends pas le titre de l&#039;article, passe ton chemin</description>
	<lastBuildDate>Tue, 29 Nov 2011 11:45:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>scp et SSH en PHP</title>
		<link>http://michauko.org/blog/2011/06/29/scp-et-ssh-en-php/</link>
		<comments>http://michauko.org/blog/2011/06/29/scp-et-ssh-en-php/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 11:36:49 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[pecl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[scp]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[ssh2.so]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1244</guid>
		<description><![CDATA[Hop, J&#8217;ai eu besoin de faire un script un peu évolué pour jouer avec une base Oracle et des fichiers à ramener depuis un serveur distant. Bref, j&#8217;ai pensé au PHP pour faire un truc assez fin, mêlant Oracle et des transferts de fichiers en &#171;&#160;scp&#160;&#187;. Seule difficulté, installer le module SSH pour PHP. Ce [...]]]></description>
			<content:encoded><![CDATA[<p>Hop,<br />
J&#8217;ai eu besoin de faire un script un peu évolué pour jouer avec une base Oracle et des fichiers à ramener depuis un serveur distant.<br />
Bref, j&#8217;ai pensé au PHP pour faire un truc assez fin, mêlant Oracle et des transferts de fichiers en &laquo;&nbsp;scp&nbsp;&raquo;.</p>
<p>Seule difficulté, installer le module SSH pour PHP. Ce que je décris ici.<br />
Ensuite, les bouts de codes exemple sont sur <a href="http://www.php.net/manual/fr/book.ssh2.php" target="_blank">la doc de PHP</a>.</p>
<h1>Côté serveur Debian</h1>
<p>J&#8217;étais parti de l&#8217;installation PECL directement, ça plante, il manquait des petits bouts côté Debian<span id="more-1244"></span>. Je montre pour l&#8217;exemple :</p>
<pre>srv:~# pecl install ssh2 "channel://pecl.php.net/ssh2-0.11.2"
Failed to download pecl/ssh2 within preferred state "stable", latest release is version 0.11.2, stability "beta", use "channel://pecl.php.net/ssh2-0.11.2" to install
downloading ssh2-0.11.2.tgz ...
Starting to download ssh2-0.11.2.tgz (22,740 bytes)
........done: 22,740 bytes
[...]
checking for ssh2 files in default path... not found
configure: error: The required libssh2 library was not found.  You can obtain that package from http://sourceforge.net/projects/libssh2/
ERROR: `/tmp/pear/temp/ssh2/configure --with-ssh2' failed
</pre>
<p>Donc, il faut d&#8217;abord installer tout ça :</p>
<pre>srv:~# apt-cache search libssh2
libnet-ssh2-perl - Perl module for the SSH 2 protocol
libssh2-1-dbg - SSH2 client-side library (debug package)
libssh2-1-dev - SSH2 client-side library (development headers)
libssh2-1 - SSH2 client-side library
libssh2-php - PHP Bindings for libssh2
python-libssh2 - Python binding for libssh2 library

srv:~# aptitude install libssh2-1-dev libssh2-php</pre>
<h1>Installation du module avec PECL</h1>
<p>On peut donc enfin installer le module :</p>
<pre>srv:~# pecl install ssh2 "channel://pecl.php.net/ssh2-0.11.2"
Failed to download pecl/ssh2 within preferred state "stable", latest release is version 0.11.2, stability "beta", use "channel://pecl.php.net/ssh2-0.11.2" to install
[...]
Build process completed successfully
Installing '/usr/lib/php5/20090626+lfs/ssh2.so'
install ok: channel://pecl.php.net/ssh2-0.11.2
configuration option "php_ini" is not set to php.ini location
You should add "extension=ssh2.so" to php.ini
aladdin:~# grep extension /etc/php5 -r
/etc/php5/conf.d/gd.ini:extension=gd.so
/etc/php5/conf.d/ssh2.ini:extension=ssh2.so
/etc/php5/conf.d/snmp.ini:extension=snmp.so</pre>
<p>L&#8217;installation se charge toute seule d&#8217;activer l&#8217;extension ssh2.so dans les fichiers de conf PHP.</p>
<h1>Exemple de code d&#8217;un transfert</h1>
<pre>define ("SSH_KEY","/path/to/.ssh/id_dsa");
define ("SSH_FINGERPRINT","BXXXXXXXXXXXXXXXXXXXXXX81"); # à récupérer la première fois
...
$ssh = ssh2_connect(SSH_SERVER,SSH_PORT);
if (ssh2_fingerprint ($ssh,SSH2_FINGERPRINT_MD5) != SSH_FINGERPRINT) { # bien penser à contrôler le fingerprint ; c'est dommage de s'en priver !
  echo "c'est mal";
}
if (!ssh2_auth_pubkey_file($ssh, SSH_LOGIN, SSH_KEY.".pub", SSH_KEY, '')) {
  echo "authentif par clef ratée";
}
...
if (@ssh2_scp_recv ($ssh, $fich_src, $fich_dest)) {
  echo "transfert OK";
}
...
</pre>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2011/06/29/scp-et-ssh-en-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OracleToolbox sous Linux, pour analyser vos perfs Oracle</title>
		<link>http://michauko.org/blog/2010/02/03/oracletoolbox-sous-linux-pour-analyser-vos-perfs-oracle/</link>
		<comments>http://michauko.org/blog/2010/02/03/oracletoolbox-sous-linux-pour-analyser-vos-perfs-oracle/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 17:19:56 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[oci8]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[oracletoolbox]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1005</guid>
		<description><![CDATA[L&#8217;objectif Afin de creuser certaines baisses de perfs d&#8217;une base Oracle non loin de là, j&#8217;ai cherché un outil, si possible libre, pour obtenir facilement des infos du genre top-ten des requêtes les plus lancées, les plus longues, qui brassent le plus de données etc etc. Et de faire un EXPLAIN sur celles-ci pour trouver [...]]]></description>
			<content:encoded><![CDATA[<h1>L&#8217;objectif</h1>
<p>Afin de creuser certaines baisses de perfs d&#8217;une base Oracle non loin de là, j&#8217;ai cherché un outil, si possible libre, pour obtenir facilement des infos du genre top-ten des requêtes les plus lancées, les plus longues, qui brassent le plus de données etc etc. Et de faire un EXPLAIN sur celles-ci pour trouver l&#8217;index qu&#8217;on a raté, l&#8217;algorithme pensé avec les pieds et ce genres de choses.</p>
<p>Comme Oracle est un lointain souvenir, je n&#8217;avais pas envie de me plonger dans la liste des tables V_$TRUC qui contiennent tout ceci, mais dont je n&#8217;ai aucune envie de me souvenir.</p>
<h1>Quelques outils</h1>
<p>Bilan, on trouve rapidement :<span id="more-1005"></span></p>
<ul>
<li>
l&#8217;Enterprise Manager d&#8217;Oracle (java, lourd, chiant, façon Oracle tout simplement)
</li>
<li>
SpotLight de l&#8217;éditeur Quest Software (celui qui pond T.O.A.D). Ca balance du gros, mais c&#8217;est commercial, cher etc. Vu que tout est dans des tables et que j&#8217;ai simplement besoin d&#8217;un outil qui me présente ça lisiblement, c&#8217;est presque trop. M&#8217;enfin, si vous êtes fortunés, n&#8217;hésitez pas.
</li>
<li>
Enfin, OracleToolBox sur <a href="http://www.oracletoolbox.org/">http://www.oracletoolbox.org/</a>
</li>
</ul>
<h1>La configuration de OracleToolbox</h1>
<p>Je livre ici 2/3 détails sur l&#8217;installation de Oracle Toolbox, après avoir ramé un peu.<br />
C&#8217;est rapide, mais ça vaut sûrement le coup d&#8217;être résumé :</p>
<h2>Couche Oracle</h2>
<p>Il faut d&#8217;abord avoir une couche cliente Oracle et PHP/OCI8 fonctionnelle. Ca tombe bien je l&#8217;ai décrit ici : <a href="http://michauko.org/blog/2009/05/07/installer-le-client-oracle-sur-debianlenny-interco-avec-php/">http://michauko.org/blog/2009/05/07/installer-le-client-oracle-sur-debianlenny-interco-avec-php/</a></p>
<h2>Installation</h2>
<p>Facile, il suffit de dézipper, par exemple dans <code>/var/www/oracletoolbox/</code>.</p>
<h2>Variables globales</h2>
<p>Il faut activer le passage de variables globales. C&#8217;est le choix de codage qui est fait avec l&#8217;application. Côté PHP, il s&#8217;agit d&#8217;un paramètre sensible permettant éventuellement quelques failles de sécurité.<br />
Donc 2 options s&#8217;offrent à nous :</p>
<ul>
<li>la première, crade pour tester, c&#8217;est de passer à &laquo;&nbsp;On&nbsp;&raquo; la variable <code>register_globals</code> dans <code>/etc/php5/apache2/php.ini</code>
</li>
<li>la deuxième sera plutôt d&#8217;intégrer cette modification uniquement pour le répertoire <code>/var/www/oracletoolbox/</code>, décrit ci-dessous avec au passage la restriction d&#8217;accès à l&#8217;outil par htaccess.
</li>
</ul>
<h2>htpasswd &#038; register_globals</h2>
<p>Pour protéger l&#8217;accès à l&#8217;outil, je propose une conf spécifique pour ce répertoire (<code>/var/www/oracletoolbox/</code>) qu&#8217;on décrira par exemple dans <code>/etc/apache2/conf.d/oracletoolbox</code> :</p>
<pre>&lt;Directory /var/www/oracletoolbox>
        AuthName "Acces restreint"
        AuthType Basic
        AuthUserFile /etc/oracle/toolbox.htpass
        &lt;limit GET POST>
                require user toolbox
        &lt;/Limit>
        php_value register_globals 1
        &lt;Files *.ini>
                Order allow,deny
                Deny from all
        &lt;/Files>

&lt;/Directory></pre>
<p>A noter le &laquo;&nbsp;php_value&nbsp;&raquo;, qui évite d&#8217;activer &laquo;&nbsp;register_globals&nbsp;&raquo; sur toute l&#8217;installation Apache/PHP. Donc de la restreindre à l&#8217;application OracleToolbox.<br />
La restriction sur les fichiers ini évitera qu&#8217;un gros malin récupère les mots de passe.</p>
<p>
Pour créer un mot de passe associé au compte &laquo;&nbsp;toolbox&nbsp;&raquo; dans le fichier <code>/etc/oracle/toolbox.htpass</code> (emplacement complètement arbitraire), il faut utiliser l&#8217;outil <code>htpasswd</code>, comme d&#8217;hab :</p>
<pre>srv:/# htpasswd -bc /etc/oracle/toolbox.htpass toolbox mon_pass
Adding password for user toolbox
srv:/# cat /etc/oracle/toolbox.htpass
toolbox:76X12345jNUkI</pre>
<h2>Déclaration des bases, tnsnames, tout ça</h2>
<p>Le fichier &laquo;&nbsp;INSTALL&nbsp;&raquo; fourni dans le package donne tous les pré-requis logiciels, en incluant les lib GD, PNG etc. Du facile à installer si vous n&#8217;avez pas ces modules (php5-gd etc).<br />
Ce fichier donne surtout quelques indices sur le reste de la configuration Oracle.<br />
Il faudra donc jeter en vrac tous les logins/passwd des comptes Oracle qui vous permettront d&#8217;accéder à vos bases, dans <code>/var/www/oracletoolbox/pswd.ini</code>. L&#8217;outil testera tout ce qu&#8217;il trouve, quelle que soit la base à laquelle vous vous connectez, en espérant qu&#8217;un marchera.<br />
Au premier lancement de l&#8217;outil (http://votre.serveur/oracletoolbox/), il vous demandera aussi où est votre fichier &laquo;&nbsp;tnsnames.ora&nbsp;&raquo; qui décrit vos bases et lesquelles vous voudrez &laquo;&nbsp;installer&nbsp;&raquo;, c&#8217;est-à-dire rendre accessible depuis OracleToolbox. En gros, il se refait une copie locale de celles qui vous intéressent parmi toutes celles de votre tnsnames.ora. Soit. Si vous avez suivi <a href="http://michauko.org/blog/2009/05/07/installer-le-client-oracle-sur-debianlenny-interco-avec-php/">ma doc de mise en place d&#8217;Oracle sur Debian, citée plus haut</a>, le fichier est <code>/etc/oracle/tnsnames.ora</code>.<br />
Tout ceci est au final stocké dans <code>/var/www/oracletoolbox/tnsnames</code>. Au besoin ça s&#8217;édite à la main, ça va plus vite.</p>
<p>Voilà, normalement-ça-marche &#8482;.</p>
<h1>LE bug corrigé &#038; version Windows autonome</h1>
<p>Il existe une version autonome (portable ?) pour windows embarquant un apache, php et le code source. Bref tout ce qu&#8217;il faut pour lancer l&#8217;outil (il manque peut-être le client Oracle et configuration à faire avant). Ca marche bien. Juste que chaque utilisateur doit avoir tout ça en local, faire tourner momentanément un Apache sur son PC etc.</p>
<p>A côté de cette version Windows, il y a le zip des sources dont je parle depuis le début. Ca marcherait sûrement sur un Windows avec un environnement Apache/PHP/Oracle déjà mis en place d&#8217;ailleurs.<br />
Dans cette version, il y avait un léger bug dans le packaging (dans le zip), l&#8217;auteur m&#8217;a confirmé ça ce matin, qui faisait qu&#8217;un champ RAW d&#8217;Oracle était mal interpreté par PHP. Bref, ça merdait. Normalement, le package est corrigé ce jour et vous n&#8217;aurez pas de problème.<br />
Si toutefois vous voyez une réaction comme ci-dessous dans le top-ten des &laquo;&nbsp;Disk/Buffer intensive request&nbsp;&raquo;, vous êtes concerné, prenez le code de l&#8217;autre zip (celui pour windows) ou retéléchargez les sources si vous l&#8217;avez fait avant la correction :<br />
<div id="attachment_1022" class="wp-caption alignnone" style="width: 585px"><a href="http://michauko.org/blog/wp-content/uploads/2010/02/20100126_1111451.png"><img src="http://michauko.org/blog/wp-content/uploads/2010/02/20100126_1111451.png" alt="OracleToolbox avec RAWTOHEX manquant" title="OracleToolbox avec RAWTOHEX manquant" width="575" height="199" class="size-full wp-image-1022" /></a><p class="wp-caption-text">OracleToolbox avec RAWTOHEX manquant</p></div><br />
Pour en avoir le coeur net, cherchez &laquo;&nbsp;rawtohex&nbsp;&raquo; dans &laquo;&nbsp;fonction_oracle.php&nbsp;&raquo;. Si ça n&#8217;y est pas, c&#8217;est pas bon.</p>
<p>Allez, bonne analyse de perfs</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2010/02/03/oracletoolbox-sous-linux-pour-analyser-vos-perfs-oracle/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

