WampServer

Apache, PHP, MySQL on Windows 

 
  • Accueil forum
  • Retour à WampServer
  • presentation
  • Download
  • Addons
  • Formations
  • Alter Way

 
Voir le sujet: Précédent•Suivant
Aller à : Liste des Forums•Liste des messages•Nouvelle discussion•Recherche•Connexion•Imprimer la vue
Problème compatibilité Free
Envoyé par: Roger34 (---.w81-251.abo.wanadoo.fr)
Date: 29 September 2008 à 15:53

Bonjour,

J'ai téléchargé mon site sur Free

Les pages html fonctionnent sans problème

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)

Version de PHP:
4.4.7

Extensions chargées:
standard, bcmath, calendar, ctype, com, ftp, mysql, odbc, overload, pcre, session, tokenizer, xml, wddx, zlib, apache2handler, mbstring, domxml, gd, pdf

Version de MySQL:
5.0.45-community-nt
Outils

Options: Répondre•Citer ce Message
Re: Problème compatibilité Free
Envoyé par: Otomatic (---.fbx.proxad.net)
Date: 29 September 2008 à 16:51

Bonjour,

Configuration Wampserver sous Windows XP SP3 au plus près possible de la configuration Free.fr pour PHP 5

Nota : Pour forcer l'exécution de PHP version 5, mettre à la racine du site un fichier .htaccess contenant :

<ifDefine Free>
PHP 1
</ifDefine>

Extensions PHP à charger :

bcmath, bz2, calendar, ctype, curl, date, dba, dom, exif, gd, gettext,
hash, iconv, libxml, mbstring, mcrypt, mhash, mysql, pcre, PDO,
pdo_sqlite, pgsql, Reflection, session, SimpleXML, sockets, SPL,
SQLite, standard, tokenizer, wddx, xml, xmlreader, xmlwriter,
xsl, zlib

Ce qui correspond à la section Windows Extensions du fichier wamp\bin\apache\apache2.x.y\bin\php.ini

extension=php_bz2.dll
extension=php_curl.dll
extension=php_dba.dll
;extension=php_dbase.dll
;extension=php_fdf.dll
extension=php_gd2.dll
extension=php_gettext.dll
;extension=php_gmp.dll
;extension=php_ifx.dll
;extension=php_imap.dll
;extension=php_interbase.dll
;extension=php_ldap.dll
extension=php_mbstring.dll
extension=php_exif.dll
extension=php_mcrypt.dll
extension=php_mhash.dll
;extension=php_mime_magic.dll
;extension=php_ming.dll
;extension=php_msql.dll
;extension=php_mssql.dll
extension=php_mysql.dll
;extension=php_mysqli.dll
;extension=php_oci8.dll
;extension=php_openssl.dll
extension=php_pdo.dll
;extension=php_pdo_firebird.dll
;extension=php_pdo_mssql.dll
;extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_oci8.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
extension=php_pgsql.dll
;extension=php_pspell.dll
;extension=php_shmop.dll
;extension=php_snmp.dll
;extension=php_soap.dll
extension=php_sockets.dll
extension=php_sqlite.dll
;extension=php_sybase_ct.dll
;extension=php_tidy.dll
;extension=php_xmlrpc.dll
extension=php_xsl.dll
;extension=php_zip.dll
;extension=php_pdo_mysql.dll

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 :

php_admin_value upload_max_filesize 20M
php_admin_value post_max_size 20M

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

Options: Répondre•Citer ce Message
Re: Problème compatibilité Free
Envoyé par: Roger34 (---.w81-251.abo.wanadoo.fr)
Date: 29 September 2008 à 21:53

Bonjour,

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 ?

Options: Répondre•Citer ce Message
Re: Problème compatibilité Free
Envoyé par: Otomatic (---.fbx.proxad.net)
Date: 30 September 2008 à 12:17

Bonjour,

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 (.........)

Options: Répondre•Citer ce Message
Re: Problème compatibilité Free
Envoyé par: Roger34 (---.w81-251.abo.wanadoo.fr)
Date: 30 September 2008 à 20:44

Bonjour,

Merci pour ta réponse.

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...

Merci encore

Roger

Options: Répondre•Citer ce Message
Re: Problème compatibilité Free
Envoyé par: Otomatic (---.fbx.proxad.net)
Date: 01 October 2008 à 10:29

Bonjour,

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());

Options: Répondre•Citer ce Message
Re: Problème compatibilité Free
Envoyé par: Roger34 (---.w81-251.abo.wanadoo.fr)
Date: 01 October 2008 à 18:35

Bonjour,

OK, je te remercie.

C'est bien register_globals qui fout la m...

En effet, mes script sont issus d'un livre sur GoLive 6.0 et php/mysql et ils nécessitent que l'extension soit

"on".

Comment faire pour contourner cette difficulté sans "tout détricoter" ? Aurais tu une idée ?

Merci pour ton aide

Roger

Options: Répondre•Citer ce Message
Re: Problème compatibilité Free
Envoyé par: Otomatic (---.fbx.proxad.net)
Date: 01 October 2008 à 19:32

Bonjour,

Tu peux déjà éviter d'avoir à choisir get ou post pour récupérer les variables en utilisant

$toto = $_REQUEST['toto'];

Documentation : [www.php.net]

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.

Options: Répondre•Citer ce Message
Re: Problème compatibilité Free
Envoyé par: Roger34 (---.w81-251.abo.wanadoo.fr)
Date: 02 October 2008 à 21:46

Bonjour,

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 code
<table border="0" cellspacing="2" cellpadding="0" height="30">
<tr>
<td width="25"><agl:container>

<?php if (!FirstRecord($collections)) { ?>
<a <?php echo LinkToPreviousRecord($collections)?>><img src="navigation/gauche.png" alt="" height="23" width="17" border="0"></a>

<?php } ?>
</agl:container></td>
<td width="67"></td>
<td width="25"><agl:container>

<?php if (!LastRecord($collections)) { ?>
<a <?php echo LinkToNextRecord($collections)?>><img src="navigation/droite.png" alt="" height="23" width="17" border="0"></a>

<?php } ?>
</agl:container></td>
</tr>
</table>


Merci Otomatic pour ton aide.
NB je ne comprends pas les lignes <?php )?>
C'est pas un peu "tordu" comme code ?

----------------------------------------------------------------------------------

POUR INFO (aux utilisateurs de GoLive 6.0)

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] != ""winking smiley
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

if (isset($HTTP_SESSION_VARS["obscureData"])) {
$newSession = false;
}
else {
$HTTP_SESSION_VARS['obscureData'] = array();
$newSession = true;
}
}

# 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;

noSession('obscure()');
reset($HTTP_SESSION_VARS['obscureData']);

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'];

$scheme = $HTTPS=='ON' ? 'https://' : 'http://';
return "{$scheme}{$SERVER_NAME}:{$SERVER_PORT}" . $rootedURL;
}


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;
}


Merci pour votre aide et bonne lecture

Roger

Options: Répondre•Citer ce Message
Re: Problème compatibilité Free
Envoyé par: Otomatic (---.fbx.proxad.net)
Date: 03 October 2008 à 09:14

Bonjour,

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.

Options: Répondre•Citer ce Message
Re: Problème compatibilité Free
Envoyé par: Roger34 (---.w81-251.abo.wanadoo.fr)
Date: 03 October 2008 à 13:20

Bonjour,

C'est bien mon avis !

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 !

C'est la c... à l'état pur !

Si je ne m'en sors pas je le ferai en statique...

Merci encore de m'avoir aidé.

Cordialement,

Roger

Options: Répondre•Citer ce Message
Re: Problème compatibilité Free RESOLU
Envoyé par: Roger34 (---.w81-251.abo.wanadoo.fr)
Date: 08 October 2008 à 19:10

Bonjour,

J'ai résolu le problème !

1 - sur les conseil d'Otomatic, j'ai modifié ma config pour être "au plus près de Free

la voici :
Version de Apache:
Apache/2.2.6 (Win32)

Version de PHP:
5.2.5

Extensions chargées:
bcmath, calendar, com_dotnet, ctype, session, filter, ftp, hash, iconv, json, odbc, pcre, Reflection, date, libxml, standard, tokenizer, zlib, SimpleXML, dom, SPL, wddx, xml, xmlreader, xmlwriter, apache2handler, mbstring, bz2, curl, dba, exif, gd, gettext, mcrypt, mhash, mysql, mysqli, pgsql, sockets, xsl, PDO, pdo_sqlite, SQLite, zlib_filter

Version de MySQL:
5.0.45-community-nt

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.

Merci

Cordialement,

Roger

Options: Répondre•Citer ce Message
Re: Problème compatibilité Free
Envoyé par: Otomatic (---.fbx.proxad.net)
Date: 08 October 2008 à 19:15

Bonsoir,

Si tu ne mets pas de fichier .htaccess chez free, tu vas rester en PHP 4.

Options: Répondre•Citer ce Message
Re: Problème compatibilité Free
Envoyé par: Roger34 (---.w81-251.abo.wanadoo.fr)
Date: 08 October 2008 à 21:11

Bonjour,

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.

Merci encore

Roger

Options: Répondre•Citer ce Message


Aller à : Liste des Forums•Liste des messages•Recherche•Connexion
Désolé, seuls les utilisateurs connectés peuvent envoyer des messages dans ce forum.
Cliquer ici pour se connecter

design by jidePowered by Alter Way get firefoxget PHP