2017-09-15 2 views
2

S'il vous plaît pardonner mon ignorance. J'essaie d'installer PHPMailer 6.0.1 sous PHP 5.6 sous Linux. Mon installation PHP est distante et je gère tous les PHP de mes sites via FTP (je télécharge généralement des paquets sous .zips pour Win 10, décompresser puis transférer le résultat par FTP sur mon espace web). Parmi les différentes façons d'installer PHPMailer, Composer est préféré, mais c'est là que je suis décollé. Aucune des instructions de Composer ne semble appropriée à cette façon de travailler - l'installateur me demande de 'Choisir la ligne de commande PHP que vous voulez utiliser', mais je n'ai pas PHP localement ... Je suis gêné de voir le compositeur de PHPMailer. Fichier json installé en attente d'être utilisé. Mais pas PHPMailerAutoload.php (est-ce créé par Composer?)PHPMailer installer sans Compositeur

Alors j'essaye de faire une installation manuelle de PHPMailer. Je télécharge, décompresse et télécharge par FTP les répertoires résultants sur mon espace web dans le dossier PHPMailer. Insérer ensuite ce qui suit à la tête de mon code PHP et en dehors de toutes les fonctions:

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 « l'utilisation » des déclarations que je reçois une erreur de syntaxe inattendue « use » (T_USE) ... Sans eux, je aller aussi loin que d'essayer d'instancier: $ mail = new PHPMailer; mais cela échoue avec un 'PHPMailer' de classe 'non trouvé

Qu'est-ce que je fais mal s'il vous plaît et comment puis-je faire mieux?

+0

Votre vie sera tellement plus facile si vous * obtenez * PHP localement. Avoir un environnement de développement local est incroyablement utile. – ceejayoz

Répondre

0

vous modifiez require, et essayer Posé comme le wiki de PHPMailer dit:

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

Link of wiki

+3

Je ne pense pas que PHPMailerAutoload.php existe plus dans PHPMailer 6.0.1. –

+0

En effet, ce n'est pas le cas. – Synchro

+0

Désolé, je n'ai pas vu sa version. J'utilise une version plus ancienne que 6.0. –

5

Ce n'est pas spécifique à PHPMailer - il est juste les choses que vous devez traiter pour l'une des la myriade de paquets PHP qui utilisent des espaces de noms. Les documents PHP sur la façon d'utiliser use sont here.

La version courte est, vous avez besoin de mettre namespace et use directives avant tout autre script, donc si vous inversez l'ordre de vos commandes, il 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'; 

, c'est d'ailleurs l'ordre Exemple utilisé dans le readme et tous les autres exemples fournis avec PHPMailer. Vous pouvez également trouver the upgrade guide utile.

Le fichier PHPMailerAutoload.php n'existe plus - l'autochargeur du compositeur fait un bien meilleur travail. Le fichier composer.json de PHPMailer est utilisé pour résoudre les dépendances et les exigences de compatibilité du fichier de composition de votre application, c'est-à-dire pour indiquer au fichier de composition de votre projet comment utiliser PHPMailer - mais pas le fichier de compositeur de votre projet. avoir le sien.

Développer sans une instance PHP locale est un travail ardu - le développement sur votre serveur live est, disons, "découragé"! Si vous ne pouvez pas installer PHP directement, exécutez-le dans une VM en utilisant VirtualBox ou quelque chose comme XAMPP qui est complètement autonome.

+0

Inverser l'ordre de 'utiliser' et 'exiger' n'a fait aucune différence, mais le déplacement à la tête du script a fonctionné - merci beaucoup. En regardant la documentation pour 'use', je ne comprends toujours pas pourquoi c'est le cas car il n'y a pas de positionnement pré-requis en dehors de toute fonction (et, supposons-le, précédant l'instanciation de tout nom de classe défini en eux). – decomplexity

+0

Il ne m'est pas venu à l'esprit que vous ne les aviez pas déjà en tête du script. – Synchro

+2

Le non-sens de 'PHPMailer \ PHPMailer \ PHPMailer' fonctionne parfaitement! utiliser merci \ merci \ merci. – andreszs

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