web-dev-qa-db-fra.com

Installation de PHPMailer sans Composer

S'il vous plaît pardonnez mon ignorance. J'essaie d'installer PHPMailer 6.0.1 sous PHP 5.6 sous Linux. Mon PHP installation est distante et je gère tous les sites Web PHP via FTP (je télécharge généralement des packages au format .zips vers Windows 10, décompresse puis dépose le résultat dans mon espace Web).

Parmi les différentes façons d’installer PHPMailer, Composer est préféré, mais c’est là que je me débrouille. Aucune des instructions de Composer ne semble appropriée à cette façon de travailler - l'installateur me demande de bien choisir la ligne de commande PHP que vous voulez utiliser ", mais je n'ai pas PHP localement ... De manière ennuyeuse, je vois le fichier composer.json de PHPMailer installé en attente d’être utilisé. Mais pas de PHPMailerAutoload.php (est-ce créé par Composer?)

J'essaie donc de faire une installation manuelle de PHPMailer. Je télécharge, décompresse et FTP télécharge les répertoires résultants sur mon espace Web dans le dossier PHPMailer. J'insère ensuite le texte suivant en tête de mon code PHP et en dehors de toute fonction:

require_once 'PHPMailer/src/PHPMailer.php';
require_once 'PHPMailer/src/SMTP.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

Avec les instructions ‘use’, j’obtiens une erreur de syntaxe inattendue 'use' (T_USE) … Sans elles, j’essaye d’instancier: $ Mail = new PHPMailer; mais cela échoue avec une 'classe' PHPMailer 'non trouvée

Qu'est-ce que je fais mal et comment puis-je faire mieux?

4
decomplexity

Cela n’est pas propre à PHPMailer. Il s’agit uniquement des éléments à traiter dans les nombreux packages PHP utilisant des espaces de noms. Les docs PHP sur l'utilisation de use sont ici .

La version courte est, vous devez mettre les directives namespace et use avant tout autre script, donc si vous inversez simplement l'ordre de vos commandes, cela devrait fonctionner:

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require_once 'PHPMailer/src/PHPMailer.php';
require_once 'PHPMailer/src/SMTP.php';

Incidemment, il s'agit de l'exemple d'ordre utilisé dans le fichier Lisez-moi et de tous les autres exemples fournis avec PHPMailer. Vous pouvez trouver le guide de mise à niveau utile aussi.

Le fichier PHPMailerAutoload.php n'existe plus - le chargeur automatique du composeur fait un travail bien meilleur. Le fichier composer.json propre à PHPMailer est utilisé pour résoudre les dépendances et la compatibilité des indicateurs pour le propre fichier de composition de votre application. En d'autres termes, il indique au fichier de composition de votre projet comment utiliser PHPMailer. avoir le sien.

Développer sans instance locale PHP est un travail difficile - développer sur votre serveur live est, dirons-nous, "découragé"! Si vous ne pouvez pas installer PHP directement, exécutez-le dans un VM à l'aide de VirtualBox ou de quelque chose comme XAMPP qui est complètement autonome.

9
Synchro
In version 6.02, each of the phpmailer modueles contain the namespace `PHPMailer\PHPMailer` declaration so the following works (no autoloader needed but this routine should be in `/src` folder):
include($_SERVER['DOCUMENT_ROOT'].'/path_setup.php');
require_once ($_SERVER['DOCUMENT_ROOT'].'/php/PHPMailer/src/PHPMailer.php');
require_once ($_SERVER['DOCUMENT_ROOT'].'/php/PHPMailer/src/SMTP.php');
require_once ($_SERVER['DOCUMENT_ROOT'].'/php/PHPMailer/src/Exception.php');
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
$mail = new PHPMailer(true);
3
DBStamps

Modifiez-vous require et essayez-le comme le wiki de PHPMailer le dit:

<?php
require 'PHPMailerAutoload.php';
$mail = new PHPMailer;

Lien du wiki

0
David Fornazier