La connexion des pages en php fonctionne (je l'ai testée)
La connexion avec la base mysql fonctionne (je l'ai testée)
MAIS...
j'utilise une source de données (collections) et une requête sql contenant la concaténation des fichiers suivants :
select *, CONCAT('dyna_images/petit/', photo) as petite, CONCAT('dyna_images/moyen/', photo) as moyenne, CONCAT('dyna_images/grand/', photo) as grande FROM painting order by titre
L'objectif est l'affichage d'un tableau dynamique d'images par répétition chaque image devrait s'agrandir en taille moyenne (en cliquant) et idem pour les grandes
Je précise que ça fonctionne en local
J'ai utilisé FTP pour télécharger et j'ai entré les nouvelles cordonnées (nom de la source de données : roger_tartempion.mysql.sbs, hôte : ftpperso.free.fr, nom de la base : roger_tartempion, nom de l'utilisateur roger.tartempion, psw : ......)
MAIS en ligne, le tableau dynamique et les photos n'apparait pas.
Ce code est-il interdit chez Free ? Par quoi le remplacer ?
Merci pour votre aide
Ma config :
Windows XP et GoLive 6.01
Configuration Serveur Version de Apache: Apache/2.2.6 (Win32)
Valeurs des variables à vérifier et éventuellement modifier dans ce même fichier php.ini
allow_call_time_pass_reference = On allow_url_fopen = On always_populate_raw_post_data = Off arg_separator.input = & arg_separator.output = & asp_tags = On auto_globals_jit = On default_mimetype = text/html define_syslog_variables = Off display_errors = On display_startup_errors = Off enable_dl = On error_reporting = E_ALL ; Valeur conseillée expose_php = On file_uploads = On html_errors = On ignore_repeated_errors = Off ignore_repeated_source = Off ignore_user_abort = Off implicit_flush = Off log_errors = On log_errors_max_len = 1024 magic_quotes_gpc = On magic_quotes_runtime = Off magic_quotes_sybase = Off max_execution_time = 20 max_input_time = 60 memory_limit = 32M post_max_size = 3M precision = 14 realpath_cache_size = 16K realpath_cache_ttl = 120 register_argc_argv = On register_globals = Off register_long_arrays = Off report_memleaks = On report_zend_debug = On safe_mode = On safe_mode_gid = Off serialize_precision = 100 short_open_tag = On ; Conseillé de mettre à Off SMTP = localhost smtp_port = 25 sql.safe_mode = Off track_errors = Off upload_max_filesize = 2M variables_order = EGPCS xmlrpc_error_number = 0 xmlrpc_errors = Off y2k_compliance = On zend.ze1_compatibility_mode = Off
--- PhpMyAdmin Pour obtenir 20480 kio maxi à l'import dans phpMyAdmin, sans modifier les valeurs de php.ini, c'est-à-dire avoir, en local, les mêmes paramètres que free :
post_max_size = 3M upload_max_filesize = 2M
modifier le fichier wamp\alias\phpmyadmin.conf en y ajoutant deux lignes donnant les valeurs qui ne seront prises en compte que pour phpMyAdmin :
Ce qui donne comme contenu du fichier phpmyadmin.conf :
Alias /phpmyadmin "G:/wamp/apps/phpmyadmin2.11.6/" <Directory "G:/wamp/apps/phpmyadmin2.11.6/"> Options Indexes FollowSymLinks MultiViews AllowOverride all Order Deny,Allow Deny from all Allow from 127.0.0.1 php_admin_value upload_max_filesize 20M php_admin_value post_max_size 20M </Directory>
--- Mysql Moteur free est MYISAM et innoDB n'est pas supporté. Fichier wamp/bin/mysql/mysql5.0.x/my.ini # The default storage engine that will be used when create new tables when default-storage-engine=MYISAM
# Set the SQL mode to strict sql-mode="STRICT_ALL_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
# Use this option if you have a MySQL server with InnoDB support enabled # but you do not plan to use it. This will save memory and disk space # and speed up some things. skip-innodb
Merci Otomatic, j'ai bien noté de basculer en Php5, mais malheureusement, je pense que cette solution ne permet pas l'utilisation de la requête en question.
Y a t il un moyen d'obtenir un résultat équivalent compatible avec Free ?
Y'a pas que le passage en PHP5. Il faudrait que tu vérifies tou le restant : extensions et variables en local de manière à être certain que le problème vient bien de free. Ce n'est pas parce que « ça fonctionne » en local que ça doit fonctionner chez l'hébergeur ; il faut que l'environnement soit le même.
D'autre part, lorsque tu envois ta requête, y-a-t-il la gestion d'une éventuelle erreur : or die (.........)
En fait, en local (avec ma version actuelle de wamp) que j'utilise les add_on Php4 ou que je bascule en Php5, ça fonctionne très bien.
La seule restriction c'est qu'il faut activer l'extension register_globals.
C'est la maladie de GoLive que d'utiliser les variables globales.
En fait, le téléchargement s'effectue sans alerte et la mise à jour semble fonctionner sur Free.
A priori, l'instruction CONCAT ne fonctionne pas en ligne sur Free parce que l'extension register_globals n'est pas activée chez eux. (j'imagine)
Je ne vois que ça, car j'ai nommé ma base en local à l'identique que celle sur Free Ma table porte le même nom et les champs sont identiques.
De plus j'ai testé un fichier mysql_test.php qui appelle ma bdd avec une table que j'ai téléchargée sur Free. et ça fonctionne.
Les variables ne changent pas de nom au téléchargement et ma page php est bien téléchargée : tout apparaît correct sauf le tableau dynamique contenant les images.
J'espère que je ne vais pas être obligé de recommencer en statique en HTML parce que là c'est un boulot de força !
Je vais retourner dans le code source des pages côté serveur (Free) et comparer avec la source de mes pages côté wamp...
Chez free, register_globals = Off donc, si tes scripts nécessitent que ce soit à On, ça ne pourra pas fonctionner chez Free.
Néanmoins, la fonction MySql CONCAT ainsi d'ailleurs de GROUP_CONCAT fonctionnent très bien chez Free, je les utilise beaucoup :
SELECT CONCAT(UPPER(A.a_nom), ' ',A.a_prenom), P.p_rep, P.p_site FROM avia_vilg_apprentis AS A INNER JOIN avia_vilg_promotions AS P ON A.a_promo = P.p_nom ORDER BY A.a_nom, A.a_prenom"; $result = $db->query($sql) or error('Extraction noms prénoms impossible', __FILE__, __LINE__, $db->error());
$sql= "SELECT COUNT(A.a_spec), COUNT(A.a_photo), SUM(S.s_stag), GROUP_CONCAT(DISTINCT(CONCAT(S.s_abr,'=',S.s_def)) SEPARATOR ' ') AS Legende, P.p_part, P.p_contact, A.a_promo FROM avia_vilg_apprentis AS A LEFT JOIN avia_vilg_spec AS S ON A.a_spec = S.s_abr LEFT JOIN avia_vilg_promotions AS P ON A.a_promo = P.p_nom WHERE A.a_promo = '$promotion' GROUP BY A.a_promo"; $result = $db->query($sql) or error('Extraction spec, photos, stagiaires ou légende impossible', __FILE__, __LINE__, $db->error());
Mais il va falloir « décortiquer » le code pour voir quelles sont les variables passées par url ou par formulaire.
Tu vois bien pourquoi, dans une précédente contribution, je préconisais d'utiliser un environnement identique (ou plutôt similaire) à celui de l'hébergeur pour le développement en local.
J'ai trouvé sur le site Adobe un post pour adapter le fichier de configuration généré systématiquement par GoLive 6.0 lors de la création d'un site.
Ce script intitulé "Known Issue: PHP pages don't work if register_globals=Off" permet de configurer GoLive 6.0 avec un serveur en register_globals à Off
En applicant ce script, mes pages php fonctionnent en local en Php5 avec Phpsettings/register_globals à Off
Il reste deux problèmes :
1 - les pages téléchargées sur Free ne s'affichent que partiellement (sans la partie dynamique liée à Mysql)
2 - Le code permettant de passer de page en page en php ne fonctionne pas avec l'opton register_globals Off
Voici le fichier du site Adobe (j'ai ajouté des numéros de lignes à proximatives pour vous éviter de perdre du temps.
Known Issue: PHP pages don't work if register_globals=Off
Summary A workaround to allow GoLive server-side code to run with register_globals php.ini setting set to Off
Issue GoLive 6.0 server-side code depends on the register_globals php.ini setting being On. If it is Off, page execution dies in weird ways. Is there a workaround?
Solution register_globals, a PHP configuration parameter, may be turned Off at some sites as a security measure. Additionally, php 4.2 (for the first time) ships with register_globals=Off as the default value.
You will have to make a number of changes to the config files within your site to make it work with register_globals=Off. It your server must run this way, here are changes you can make to get the site to work.
1 - First, make a backup of your site! Then, edit the files in the config folder as follows. Finally, upload the edited files and give it a try.
# 1. pageParameter is broken. ligne 1007 Replace config/include/utils.runtime6.php`pageParameter() with function pageParameter($name, $defaultValue) { global $HTTP_GET_VARS; if (@$HTTP_GET_VARS[$name] != "" return $HTTP_GET_VARS[$name]; return $defaultValue; }
2. mysql.actions6.php form posts fail. # Near utils.runtime6.php`line 95, replace the statement guarded by
if (!@$GLparam['no_session']) {
with
if (!@$GLparam['no_session']) { session_start(); // this must be before any output is generated
# Just before utils.runtime6.php`obscure(), add a new function:
Lignes 1100 /** * Halts the page if the session isn't set up the way we expect (i.e., * with an 'obscureData' array as set up at the top of this file.) * Just for nicer error messages. */ function noSession($s) { global $HTTP_SESSION_VARS;
if (!isset($HTTP_SESSION_VARS['obscureData'])) trigger_error("Cannot use $s without an active session!", E_USER_ERROR); }
# Replace utils.runtime6.php`obscure() LIGNE 1120 with /** * Stores $plaintext in the session, and returns (for use by unobscure()) * the key for retrieving it; or dies because no/invalid session. * The returned key is a random number. * * The key (rather than the potentially sensitive data) can then * be passed from page to page as a URL parameter or in an * input type='hidden' form field. */ function obscure($plaintext) { global $HTTP_SESSION_VARS;
while (list($key, $value) = each($HTTP_SESSION_VARS['obscureData'])) { if ($value == $plaintext) { return $key; } }
// // Not found; need to add... // $key = rand(); $HTTP_SESSION_VARS['obscureData'][$key] = urlencode($plaintext); return $key; }
# Replace utils.runtime6.php`obscure() LIGNE 1147 with /** * Retrieves a datum from the session indexed by $key; * or dies because no/invalid session, or because there is no * such key. * obscure() places data in the session for unobscure()'s use. */ function unobscure($key) { global $HTTP_SESSION_VARS; noSession('unobscure()'); return urldecode($HTTP_SESSION_VARS['obscureData'][$key]); }
3, Redirects fail after mysql.actions6.php form posts. # Replace utils.runtime6.php`fullURL() LINE 596 with
function fullURL($rootedURL) { global $HTTP_REQUEST_VARS; $HTTPS = $HTTP_REQUEST_VARS['HTTPS']; global $HTTP_SERVER_VARS; $SERVER_NAME = $HTTP_SERVER_VARS['SERVER_NAME']; $SERVER_PORT = $HTTP_SERVER_VARS['SERVER_PORT'];
4. Error content source doesn't work (ecommerce only) # Replace utils.runtime6.php`GetError() LINE 1225 with
/** * Retrieves an error CSW from session data, or null if no session or * datum not present. */ function GetError() { global $HTTP_SESSION_VARS, $HTTP_GET_VARS, $HTTP_POST_VARS; if (!isset($HTTP_GET_VARS['FORMERR']) && !isset($HTTP_POST_VARS['FORMERR'])) return null; $r = @$HTTP_SESSION_VARS['obscureData']['FORMERR']; return !isset($r) ? null : $r; }
# Replace utils.runtime6.php`StoreError() LINE 1238 with /** * Places $cswerr into session data, to be picked up by GetError(); * or dies if no/invalid session. */ function StoreError($cswerr) { global $HTTP_SESSION_VARS; noSession('StoreError()'); $HTTP_SESSION_VARS['obscureData']['FORMERR'] = $cswerr; }
5. Troubleshooting page doesn't work. (This has been fixed in GoLive 6.0.1.) # Replace config/info/troubleshootinginclude.php`precheck() with function precheck() { $error = 0; global $HTTP_SERVER_VARS; $p = @$HTTP_SERVER_VARS['PHP_SELF']; if (!ereg('config[\/]info[\/]troubleshooting', $p)) { $msg = "<span class='failed'>\n"; $msg .= "This troubleshooting.php file needs to be under the config/info folder to work properly.\n"; $msg .= "Please relocate it and try again. If troubleshooting.php is in config/info folder,\n"; $msg .= "register_globals may be \"off\" in php.ini file. It needs to be \"on\" as default setting.\n"; $msg .= "</span>\n"; echo $msg; $error = -1; } return $error; }
Passes moi l'expression, mais pour moi, c'est du code de m***e !
On ouvre php, on le ferme, on le rouvre, on le referme à longueur de lignes. Ça devient non seulement illisible, mais également incompréhensible.
Si il y a juste <?php )?> (Fermeture d'accolade) quelque part, c'est qu'elle a été ouverte un peu avant.
Ah ! Que je suis content d'écrire, pour tous mes sites, mon code complètement à la main ; d'accord, avec un éditeur de texte qui peut et sait faire beaucoup de « trucs » : projets, macros, coloration syntaxique, indentations, mode colonne, mode hexa, etc.
J'ai réglé les extensions comme tu m'as dit et on dirait que le serveur est plus rapide... Peut-être à cause de la mémoire supplémentaire qui lui est allouée ?
Je vais éditer le code avec CONTEXT pour repérer les balises, les variables et les functions
Mais j'ai bien peur que la modif du fichier config ne s'applique qu'à la neutralisation de regiter_globals dans le site, alors que mon problème vient du code généré par les routines préconfigurées qui, elles, génèrent des variables globales !
Mais j'avais modifié le fichiers utils_runtime.php dans GoLive pour pouvoir exécuter les pages en Php avec register_globals sur Off
Il était donc inutile de placer le fichier .htaccess dans à la racine du site. ça fonctionnait en local mais pas en ligne.
Donc pour les utilisateurs de GoLive 6.01 qui travaillent en connexion avec wamp en PhP5 Mettre l'esxtension register_globals sur Off Modifier le fichier utils_runtime.php dans le répertoire config/include comme je l'ai décrit dans un post précédent. Et ne PAS mettre .htaccess dans le site.
Je ne dis pas le contraire, mais comme il n'est pas prévu que ces Messieurs de chez Adobe fassent évoluer leur logiciel (ils ont préféré racheter Macromedia) en le rendant "compatible" avec Php5, je vais m'en contenter pour le moment.
L'important c'est que ça marche et que j'ai compris pourquoi.
Mais tes infos et quelques sites m'ont été très utiles.