Hoi,

Ik moet upgraden van PHP 5.x naar 7.1
De vraag is of iemand mij zou kunnen helpen dit op te lossen, het script draait al jaren zonder problemen,maar nu
met php 7 is het een probleem.

Als ik de versie aanpas krijg ik onderstaande foutmelding:

Fatal error: Uncaught Error: Using $this when not in object context in /home/0003/sites/s202/vasteplant.net/web/catalogus/mail_class/smtp.php:46 Stack trace: #0 /home/0003/sites/s202/vasteplant.net/web/catalogus/mail_class/htmlMimeMail.php(462): smtp::connect(Array) #1 /home/0003/sites/s202/vasteplant.net/web/catalogus/werkbestand.php(151): htmlMimeMail->send(Array, 'smtp') #2 /home/0003/sites/s202/vasteplant.net/web/catalogus/index.php(7): require('/home/0003/site...') #3 {main} thrown in /home/0003/sites/s202/vasteplant.net/web/catalogus/mail_class/smtp.php on line 46

Ik zal hier de inhoud van het document smtp.php plaatsen, de fout regel 46 is:
if(!isset($this->status)){


<?php
define('SMTP_STATUS_NOT_CONNECTED', 1, TRUE);
define('SMTP_STATUS_CONNECTED', 2, TRUE);

class smtp{

var $authenticated;
var $connection;
var $recipients;
var $headers;
var $timeout;
var $errors;
var $status;
var $body;
var $from;
var $host;
var $port;
var $helo;
var $auth;
var $user;
var $pass;

function smtp($params = array()){

if(!defined('CRLF'))
define('CRLF', "\r\n", TRUE);

$this->authenticated = FALSE;
$this->timeout = 5;
$this->status = SMTP_STATUS_NOT_CONNECTED;
$this->host = 'localhost';
$this->port = 25;
$this->helo = 'localhost';
$this->auth = FALSE;
$this->user = '';
$this->pass = '';
$this->errors = array();

foreach($params as $key => $value){
$this->$key = $value;
}
}

function &connect($params = array()){

if(!isset($this->status)){
$obj = new smtp($params);
if($obj->connect()){
$obj->status = SMTP_STATUS_CONNECTED;
}

return $obj;

}else{
$this->connection = fsockopen($this->host, $this->port, $errno, $errstr, $this->timeout);
if(function_exists('socket_set_timeout')){
@socket_set_timeout($this->connection, 5, 0);
}

$greeting = $this->get_data();
if(is_resource($this->connection)){
return $this->auth ? $this->ehlo() : $this->helo();
}else{
$this->errors[] = 'Fout tijdens verbinden met server: '.$errstr;
return FALSE;
}
}
fclose($this->connection);
}

function send($params = array()){

foreach($params as $key => $value){
$this->set($key, $value);
}

if($this->is_connected()){

if($this->auth AND !$this->authenticated){
if(!$this->auth())
return FALSE;
}

$this->mail($this->from);
if(is_array($this->recipients))
foreach($this->recipients as $value)
$this->rcpt($value);
else
$this->rcpt($this->recipients);

if(!$this->data())
return FALSE;

$headers = str_replace(CRLF.'.', CRLF.'..', trim(implode(CRLF, $this->headers)));
$body = str_replace(CRLF.'.', CRLF.'..', $this->body);
$body = $body[0] == '.' ? '.'.$body : $body;

$this->send_data($headers);
$this->send_data('');
$this->send_data($body);
$this->send_data('.');

$result = (substr(trim($this->get_data()), 0, 3) === '250');

return $result;
}else{
$this->errors[] = 'Niet verbonden!';
return FALSE;
}
}

function helo(){
if(is_resource($this->connection)
AND $this->send_data('HELO '.$this->helo)
AND substr(trim($error = $this->get_data()), 0, 3) === '250' ){

return TRUE;

}else{
$this->errors[] = 'HELO command gefaalt, output: ' . trim(substr(trim($error),3));
return FALSE;
}
}

function ehlo(){
if(is_resource($this->connection)
AND $this->send_data('EHLO '.$this->helo)
AND substr(trim($error = $this->get_data()), 0, 3) === '250' ){

return TRUE;

}else{
$this->errors[] = 'EHLO command gefaalt, output: ' . trim(substr(trim($error),3));
return FALSE;
}
}

function rset(){
if(is_resource($this->connection)
AND $this->send_data('RSET')
AND substr(trim($error = $this->get_data()), 0, 3) === '250' ){

return TRUE;

}else{
$this->errors[] = 'RSET command gefaalt, output: ' . trim(substr(trim($error),3));
return FALSE;
}
}
function quit(){
if(is_resource($this->connection)
AND $this->send_data('QUIT')
AND substr(trim($error = $this->get_data()), 0, 3) === '221' ){

fclose($this->connection);
$this->status = SMTP_STATUS_NOT_CONNECTED;
return TRUE;

}else{
$this->errors[] = 'QUIT command gefaalt, output: ' . trim(substr(trim($error),3));
return FALSE;
}
}

function auth(){
if(is_resource($this->connection)
AND $this->send_data('AUTH LOGIN')
AND substr(trim($error = $this->get_data()), 0, 3) === '334'
AND $this->send_data(base64_encode($this->user)) // Send username
AND substr(trim($error = $this->get_data()),0,3) === '334'
AND $this->send_data(base64_encode($this->pass)) // Send password
AND substr(trim($error = $this->get_data()),0,3) === '235' ){

$this->authenticated = TRUE;
return TRUE;

}else{
$this->errors[] = 'AUTH command gefaalt: ' . trim(substr(trim($error),3));
return FALSE;
}
}

function mail($from){

if($this->is_connected()
AND $this->send_data('MAIL FROM:<'.$from.'>')
AND substr(trim($this->get_data()), 0, 2) === '250' ){

return TRUE;

}else
return FALSE;
}

function rcpt($to){

if($this->is_connected()
AND $this->send_data('RCPT TO:<'.$to.'>')
AND substr(trim($error = $this->get_data()), 0, 2) === '25' ){

return TRUE;

}else{
$this->errors[] = trim(substr(trim($error), 3));
return FALSE;
}
}

function data(){

if($this->is_connected()
AND $this->send_data('DATA')
AND substr(trim($error = $this->get_data()), 0, 3) === '354' ){

return TRUE;

}else{
$this->errors[] = trim(substr(trim($error), 3));
return FALSE;
}
}

function is_connected(){

return (is_resource($this->connection) AND ($this->status === SMTP_STATUS_CONNECTED));
}

function send_data($data){

if(is_resource($this->connection)){
return fwrite($this->connection, $data.CRLF, strlen($data)+2);

}else
return FALSE;
}

function &get_data(){

$return = '';
$line = '';
$loops = 0;

if(is_resource($this->connection)){
while((strpos($return, CRLF) === FALSE OR substr($line,3,1) !== ' ') AND $loops < 100){
$line = fgets($this->connection, 512);
$return .= $line;
$loops++;
}
return $return;

}else
return FALSE;
}

function set($var, $value){

$this->$var = $value;
return TRUE;
}

} // End of class
?>
Op internet kom ik uit dat dit onderdeel is van een mail-library die behoorlijk verouderd is. Is het niet raadzaam er om deze te vervangen door phpmailer?
Euh ja, wellicht ?
Waar kan ik deze vinden dan.. ik ben 4 jaar uit de rolatie dus weet even niet meer hoe en wat...
Maar is mijn probleem niet op te lossen dan ?
Kan, maar waarom zou je oude code willen onderhouden / forken, terwijl er niet voor niets nieuwe versies uitgebracht worden?
Ik probeer de phpmailer maar die geeft nog meer fouten..

[size=xsmall]Toevoeging op 01/11/2018 11:28:55:[/size]

Deze server heeft geen phpmailer en ik heb geen bevoegdheid om deze te installeren...
Dus dit gaat hem niet worden...
Je hebt geen bevoegdheden nodig om te installeren. Downloaden van github, uploaden naar je server en includen maar.
Dan snap ik dus na 4 jaar niks meer,
ik krijg al een dikke error op deze

use PHPMailer\PHPMailer\PHPMailer;

Wat heb je precies gedaan, en welke error bedoel je? Aan vaagheid hebben we niks ;)
Laat ik het anders doen.

Op welke link kan ik de class downlowden voor linux. de class waar ik dus geen instalatie voor nodig heb ?

Reageren