Formulaire "lablonde" mailing liste d'ovh

vince26exe
Invité n'ayant pas de compte PHPfrance

04 mars 2011, 16:14

Bonjour,

Le sujet concerne le formulaire d'inscription à une mailing liste d'ovh réalisé par lablonde et que l'on peut retrouver via ce lien :

http://blog.lablonde.fr/billets/77-s...mlm-d-ovh.html


Novice en PHP, j'ai bien tenté de comprendre mais pour l'instant ca ne rentre pas. Je précise que je suis sur un serveur mutualisé d'ovh. Voilà le problème, ou plutôt les 2 probs.

1.

Lorsque je clique sur le bouton valider après une inscription ou une désinscription, la mail part bien mais le message suivant s'affiche :

- Warning: fread() [function.fread]: Length parameter must be greater than 0. in C:\wamp\www\snapatsi\ovh-mailing-list\index.php on line 28

A part mettre un @ devant "fread" pour faire disparaitre le message, je n'ai rien trouvé mais je doute d'avoir choisi la bonne solution.

2. Dès que je reçois le message me demandant de confirmer mon adresse, c'est à dire tout de suite après l'étape 1, et que je clique sur le lien, une fenêtre s'ouvre avec le message suivant en rouge :

- Une erreur est survenue lors de la confirmation de votre email. Merci de renouveller votre demande ou de contacter l'administrateur du site.

Et voilà, plus possible d'avancer... Quelqu'un aurait une idée ? Je précise que j'ai suivi les configurations d'install à la lettre..

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

04 mars 2011, 16:22

salut,

le lien mène vers une erreur 404

le message d'erreur indique que le 2ns paramètre de fread n'est pas bon a toi de le régler comme il faut ;)
tu peut aussi utilise file_get_content a voir !


@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 5462 Messages

04 mars 2011, 16:30


Vince26exe
Invité n'ayant pas de compte PHPfrance

04 mars 2011, 16:31

Désolé pour le lien... Effectivement. Se rendre plutôt ici : http://code.google.com/p/ovh-mailing-list/.
Je note ta solution mais je t'avoue que je ne comprends pas grand chose (je n'ai pratiquement aucune connaissance en php). En revanche, j'ai absolument besoin de mettre ce formulaire en place rapidement.
Merci de ton aide

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

04 mars 2011, 17:05

a vu de nez ton fichier temp_sub.php est vide et ne devrait pas l'être. A tu essayé de remettre le fichier d'origine ?

@+
Il en faut peu pour être heureux ......

vince26exe
Invité n'ayant pas de compte PHPfrance

04 mars 2011, 17:21

Effectivement, le fichier en question ne devrait pas être vide, il doit récupérer une variable de type "adresse mail". Je remets le fichier d'origine mais ca ne change pas le problème. Le script a été écrit pour un environnement unix (j'ai du retirer plein de .\ devant les noms de répertoires dans le fichier index.php pour indiquer que l'on restait dans le répertoire courant).

Voici le contenu du fichier "temp_sub.php" :

<?php
if(!defined("OVH_MAILLIST")) {
echo "Access denied!";
}
$temp = array(
);
?>

Et voici le fichier index.php

<?php

// OVH-Maillist 1.0b by la Blonde (http://blog.lablonde.fr)
// Le present script est la pleine et entiere propriete intellectuelle de l'auteur.

// Ce script permet de gerer les inscription et desinscription aux maillist d'OVH
// directement par les visiteurs par l'intermediaire d'un formulaire web.


define('OVH_MAILLIST', true);
include('config.php');
include('api-ovh.php');

$msg = $messages['homepage'];

if(isset($_REQUEST['email'])) {
$email = $_REQUEST['email'];
if (!$email || !eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+([\.][a-z0-9-]+)+$", $email)) {
$msg = sprintf($messages['unvalid_email'], $email);
unset($email);
}
}
if(isset($email) || isset($_GET['key'])) {
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : '';
switch($action) {
case 'subscribe':
$handle = fopen('temp_sub.php', 'r');
$temp_file = fread($handle, filesize('temp_sub.php'));
fclose($handle);
$handle = fopen('temp_sub.php', 'w');
$new_temp_file = str_replace(");", "'".md5($email)."' => '".$email."',\n);", $temp_file);
@fwrite($handle, $new_temp_file);
fclose($handle);

$headers .= "From: ".$config['ml']." <".$config['ml']."-help@".$config['domain'].">\n";
$headers .= "X-Mailer: PHP/".phpversion()."\n";

if(mail($email, $confirm_email['sub_subject'], sprintf($confirm_email['sub_body'], $email, $config['url'].'/index.php?action=validate_sub&key='.md5($email)), $headers)) {
$msg = sprintf($messages['confirm_subscribe'], $email);
} else {
$msg = sprintf($messages['error_subscribe'], $email);
}
break;
case 'unsubscribe':
$handle = fopen('temp_unsub.php', 'r');
$temp_file = fread($handle, filesize('temp_unsub.php'));
fclose($handle);
$handle = fopen('temp_unsub.php', 'w');
$new_temp_file = str_replace(");", "'".md5($email)."' => '".$email."',\n);", $temp_file);
@fwrite($handle, $new_temp_file);
fclose($handle);

$headers .= "From: ".$config['ml']." <".$config['ml']."-help@".$config['domain'].">\n";
$headers .= "X-Mailer: PHP/".phpversion()."\n";

if(mail($email, $confirm_email['unsub_subject'], sprintf($confirm_email['unsub_body'], $email, $config['url'].'/index.php?action=validate_unsub&key='.md5($email)), $headers)) {
$msg = sprintf($messages['confirm_unsubscribe'], $email);
} else {
$msg = sprintf($messages['error_unsubscribe'], $email);
}
break;
case 'validate_sub':
include('temp_sub.php');
$key = $_GET['key'];
if(isset($temp[$key])) {
$ssid = ovh('Login', array ('nic' => $config['nic'], 'password' => $config['pass']));
$result = ovh('MailingListSub', $ssid['value'], array('domain' => $config['domain'], 'ml' => $config['ml'], 'email' => $temp[$key]));
if($result) {
$msg = sprintf($messages['confirm_validate'], $temp[$key]);
} else {
$msg = $messages['error_validate'];
$msg .= ($ovh_status) ? '<br />'.$ovh_status : '';
}
ovh('Logout');

$temp_file = file_get_contents('temp_sub.php');
$new_temp_file = str_replace("'".$key."' => '".$temp[$key]."',\n", "", $temp_file);
$handle = fopen('temp_sub.php', 'w');
@fwrite($handle, $new_temp_file);
fclose($handle);
} else {
$msg = $messages['error_validate'];
}
break;
case 'validate_unsub':
include('temp_unsub.php');
$key = $_GET['key'];
if(isset($temp[$key])) {
$ssid = ovh('Login', array ('nic' => $config['nic'], 'password' => $config['pass']));
$result = ovh('MailingListUnsub', $ssid['value'], array('domain' => $config['domain'], 'ml' => $config['ml'], 'email' => $temp[$key]));
if($result) {
$msg = sprintf($messages['confirm_validate'], $temp[$key]);
} else {
$msg = $messages['error_validate'];
$msg .= ($ovh_status) ? '<br />'.$ovh_status : '';
}
ovh('Logout');

$temp_file = file_get_contents('temp_unsub.php');
$new_temp_file = str_replace("'".$key."' => '".$temp[$key]."',\n", "", $temp_file);
$handle = fopen('temp_unsub.php', 'w');
@fwrite($handle, $new_temp_file);
fclose($handle);
} else {
$msg = $messages['error_validate'];
}
break;
default:
die('Access denied!');
}
}

include('confirmation.php');

?>

Pourtant ce script a l'air de fonctionner avec d'autres....

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

04 mars 2011, 17:51

perso j'ai dl le script j'y ai pas toucher et y aucun problème (test sous win) donc sois t'a un soucis de droit sur le fichier soit il est vide, soit pas au bon endroit

quand au ./ et non .\ il indique que l'on commence la recherche du fichier à partir du répertoire courant. ./fichier est équivalent à fichier mais cela permet d'être clair.

essai un nouveau fichier php avec dedans
<?php
$a = filesize('./temp_sub.php');
$b = filesize('temp_sub.php');
var_dump($a,$b);
?>
et regarde ce que cela donne.

@+
Il en faut peu pour être heureux ......

vince26exe
Invité n'ayant pas de compte PHPfrance

04 mars 2011, 18:05

Merci pour les explications. Donc en gros, il n'était pas nécessaire que j'enlève les ./ ? Seulement quand je les laisse, il ne me trouve pas les fichiers dont il a besoin

Donc j'ai créé un nouveau fichier php que j'ai placé avec les autres fichiers (index etc...). Lorsque je l'appelle, il me retourne dans une page blanche : int(95) int(95).

Vince26exe
Invité n'ayant pas de compte PHPfrance

04 mars 2011, 18:37

Oui, j'ai moi même fait l'essai en local en re-téléchargeant les fichiers (sans toucher au ./) et ca fonctionne....
Mais lorsque je place le dossier à la racine de mon espace d'hébergement chez ovh et que je fais l'appel au fichier, voici le résultat :

Warning: main(./config.php) [function.main]: failed to open stream: No such file or directory in /homez.51/.../www/.../ovh-mailing-list/index.php on line 11

Warning: main() [function.include]: Failed opening './config.php' for inclusion (include_path='.:/usr/local/lib/php') in /homez.51/.../www/.../ovh-mailing-list/index.php on line 11

Warning: main(./api-ovh.php) [function.main]: failed to open stream: No such file or directory in /homez.51/.../www/.../ovh-mailing-list/index.php on line 12

Warning: main() [function.include]: Failed opening './api-ovh.php' for inclusion (include_path='.:/usr/local/lib/php') in /homez.51/.../www/.../ovh-mailing-list/index.php on line 12

vince26exe
Invité n'ayant pas de compte PHPfrance

04 mars 2011, 19:29

J'avance sur le sujet... J'ai omis de préciser que j'utilisais Joomla et son composant "jumi" pour faire l'appel au fichier index.php.. C'est là que ca pose problème car sinon le fichier fonctionne plutôt bien quand je fais l'appel sans passer par Joomla.
Comment intégrer ce script dans Joomla ??? Voici la nouvelle question....

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

04 mars 2011, 21:08

ah wé y manquait un gros "truc".

il va te falloir voir quel fichier appel celui ci, ou alors tu met "en dur" le chemin dans le commande includ, filesize etc ça t'évitera tous problème dû chemin.

Pour info il serait bon de changer le eregi ligne 18 par un preg_match histoir d'éviter un soucis dans l'avenir (eregi est une fonction dépréciée voué à la disparition).
et aussi enlever le points devant le = ligne 35

@+
Il en faut peu pour être heureux ......