FAQ DB / PHP / JAVA / Apache... === FAQ ------------------------------------------------------------------------------------ MYSQL ------------------------------------------------------------------------------------ * Comment lancer un script sql sous Mysql ? shell> mysql < batch-file | more You can catch the output in a file for further processing: shell> mysql < batch-file > mysql.out ------------------------------------------------------------------------------------ * Comment export/importer une instance de base de données ? Par exemple, on veut exporter la base bd1 et charger la totatalité dans la base bd2 Export : mysqldump -u root --databases bd1 > dump.sql Import : mysql -u root bd2 < dump.sql > log.txt Rq : pr importer une seule table => mysqldump database table > table.sql ------------------------------------------------------------------------------------ * Comment ajouter un utilisateur MySQl ? shell > mysql --user=root mysql mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost -> IDENTIFIED BY 'some_pass' WITH GRANT OPTION; mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%" -> IDENTIFIED BY 'some_pass' WITH GRANT OPTION; (L'utilisateur monty peut s'identifier à distance) mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost; (admin peut se connecter en local, et effectuer des process d'admin de la base) ------------------------------------------------------------------------------------ * Comment supprimer un user Mysql ? DELETE FROM mysql.user WHERE Host = 'localhost' AND User = 'login' ------------------------------------------------------------------------------------ * Comment faire des deletes avec normalement une sous-requête ? Les sous-requêtes sont impossibles en MySql < 4.0. Pour cela, il faut utiliser ce contournement: SELECT CONCAT('DELETE FROM faccess WHERE afileid = ', "'", temp1.fid, "'", ';') FROM faccess, temp1 WHERE faccess.afileid = temp1.fid; Ensuite, on récupère les lignes générées dans un fichier, puis on applique ce fichier par MySql interacif. ------------------------------------------------------------------------------------ SQL*Plus ------------------------------------------------------------------------------------ * Comment se connecter sur une base de données distante ? sqlplus scott/tiger@database_spec.world * Comment lancer un script .sql en oracle? @toto.sql > error.log ------------------------------------------------------------------------------------ ORACLE ------------------------------------------------------------------------------------ * comment arrêter/redémarrer Oracle ? $ svrmgrl $ connect internal $ startup ou shutdown -- relance ou arrêt de la base par défaut $ lsnrctl start LISTENER -- pour relancer le listener de la base ou bien en utilisant la commande sqldba: $ sqldba $ startup Le user Unix lançant les commandes, doit avoir des variables systèmes comme ORACLE_SID bien positionné ------------------------------------------------------------------------------------ PL/SQL ------------------------------------------------------------------------------------ * comment afficher le message d'erreur ? DECLARE err_num NUMBER; err_msg VARCHAR2(100); BEGIN . . . EXCEPTION . . . WHEN OTHERS THEN err_num := SQLCODE; err_msg := SUBSTR(SQLERRM, 1, 100) ; INSERT INTO errors (err_num, err_msg) ; END; ------------------------------------------------------------------------------------ ACCESS ------------------------------------------------------------------------------------ * Comment faire une concaténation en ODBC-Access ? C'est l'opérateur & (et non pas || en Oracle) Ex : select configuratorId & '/' & componentId from ZHeritedProperties ------------------------------------------------------------------------------------ APACHE ------------------------------------------------------------------------------------ * comment Arreter/Redémarrer Apache ? ./apachectl stop ./apachectl start ------------------------------------------------------------------------------------ * gestion de cookies et logs avec Apache : Apache peut gérer des cookies et créer un fichier de logs, afin de noter les visites sur chaque site. Quelques tests sont en cours sur le site de test, Enviro2B uniquement. Ci-dessous les étapes effectuées : - ouvrir le fichier httpd.conf - décommenter les 2 lignes contenant "mod_usertrack" - ajouter un LogFormat, nommé ici tracke2b, qui définit le format du fichier de log, qui est placé dans /opt/IBMHTTPD/logs/tracke2b_log - les paramètres du format sont : %t pour l'heure, %(cookie)n pour l'identifiant du cookie, %s pour le statut (si la page a bien été chargée), %U pour l'url de la page appelée, %(Referer)i pour l'url de la page appelante, %(User Agent) pour connaitre le navigateur, %v le nom du serveur (enviro2b.com, waste2b.com...), %h l'IP de l'utilisateur. Ajout des paramètres CustomLog, CookieName, CookieTracking... (cf bouquin ou site pour plus d'infos) ------------------------------------------------------------------------------------ TOMCAT ------------------------------------------------------------------------------------ * Comment faire fonctionner une webapp qui se connecte avec une bd oracle ? Ca ne fonctionne pas si on ajoute ojdbc14.jar dans /WEB-INF/lib. Il faut l'ajouter dans /shared/lib de tomcat. (le problème est sans doute du au chargement dynamique) ------------------------------------------------------------------------------------ * Comment relancer une webapp pour prendre en compte les modifications sur les servlets ? Soit relancer le serveur Tomcat. Soit utiliser le manager Tomcat avec l'url de commande de la forme (p. ex): http://admin:sissideux@127.0.0.1:8080/manager/reload?path=/css => rechargement de la webapp css ------------------------------------------------------------------------------------ UNIX ------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------ PHP ------------------------------------------------------------------------------------ * comment configurer PHP pour pouvoir uploader de gros fichiers ? Modifier le fichier php.ini * file_uploads = On * max_input_time = 120 ; en seconde * max_execution_time = 120 * upload_max_filesize = 10M ; Maximum allowed size for uploaded files * post_max_size = 10M ; Maximum size of POST data that PHP will accept. (cette ligne peut ne pas exister à la base) et éventuellement : (car les version de PHP antérieures à 4.0.6 lise tout le fichier dans la Ram avant d'écrire) * memory_limit = 10M ; Maximum amount of memory a script may consume (10MB) * comment récupérer le login Windows en PHP ? $nbtstat = "nbtstat -A ".$_SERVER['REMOTE_ADDR']; exec ($nbtstat,$result); foreach ($result as $row) { if (strpos($row,"<03>")) { $nomwindows = strtok($row," "); } } ------------------------------------------------------------------------------------ * comment accèder à un radio de formulaire, nommé avec des []? Explication : PHP demande à ce que le nom d'un input de type radio ou select soit suffixé par [] pour pouvoir stocker plusieurs valeurs. Ex: <input type='checkbox' name='customers[]' value='$custid'> Malheureusement, javscript ne peut plus accéder de façon classique à cet élément. Il faut utiliser : document.myform.elements['customers[]'] ------------------------------------------------------------------------------------ PYTHON ------------------------------------------------------------------------------------ * comment avoir rapidement la description d'une fonction Python? print xxx.__doc__ où xxx est le nom de la fonction ------------------------------------------------------------------------------------ JAVA ------------------------------------------------------------------------------------ * Classpath et path : Le classpath représente les différents chemins pour trouver les classes Java (classe qu'on lance par le main comme les classe "bibliothèque". Il y a 2 façons de renseigner le classpath : - soit localement, au niveau du lancement de la jvm avec l'option -cp java -classpath cuodtester.jar;cuodclient.jar; tester.TheTester 1stParam 2ndParam - soit globalement, au moyen d'une variable système : CLASSPATH = .;D:\lib;D:\lib\log4j.jar Rem : - dans le cas où l'on spécifie un répertoire, c'est le répertoire contenant l'ensemble des packages. E. g. si dans C:\Temp on a un package pom, qui contient une classe Toto.java, alors il faudra rajouter CLASSPATH = %CLASSPATH%;C:\Temp - dans le cas où l'on spécifie un .jar, alors il faut donner le chemin complet en incluant le nom du ficher .jar. E.g. si on a C:\Temp\pom.jar, alors on rajoute C:\Temp\pom.jar au CLASSPATH. - toujours rajouter . dans la variable CLASSPATH. Sinon, on ne peut plus lancer P. ex. si on ne rajoute pas le '.' : (avec classe se trouvant dans Test\pom\TestSystem.java) C:\Program Files\eclipse\workspace>java -cp Test TestSystem Exception in thread "main" java.lang.NoClassDefFoundError: TestSystem => ne marche pas C:\Program Files\eclipse\workspace>java -cp Test pom.TestSystem => marche Comment voir les choses : le -cp spécifie un chemin : C:\toto le nom de la classe Java utilise un nom de classes java : Toto.java ou package.Toto.java ou Toto.jar Cas différent si on a Toto.java ou pom.Toto.java. Dans le 1er cas, la JVM essaie de trouver une classe du nom de Toto.java. Dans le 2ème, la JVM récupère la valeur de la variable CLASSPATH, et essaie de trouver un package pom, puis une classe Toto.java. Si on veut appler un .jar, on peut spécifier un nom de chemin physique : Ex : java -jar c:\temp\toto.jar java.util.Properties p = System.getProperties(); java.util.Enumeration keys = p.keys(); String key; while( keys.hasMoreElements() ) { key = keys.nextElement().toString(); System.out.println( key + ": " + System.getProperty(key) ); } * Comment se connecter à une base de données Access sans ODBC ? Ex: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/temp/thebase.mdb"; String user = "user"; String pass = "pass"; Connection connection = DriverManager.getConnection(url,user,pass);