Blank screen when importing subscribers to a list

Hi all,

I have an old server with phpList 3.3.3 so I just installed a new linux server with phpList 3.6.6 and I’m testing it to check if everything is working fine before putting it in production.

When I try to import subscribers that are already created to a list (doesn’t matter if they are in another list or not) I get a blank screen and I can’t do anything.

Can someone help please ? I’m stuck here and I cannot find what can it be, I can’t see anything in the logs.

I’m testing with previous versions and in all of them the same issue so I’m thinking that can be something with mysql or php.

Also I tried to upgrade my old server to phpList 3.6.6 and I don’t have any problem when importing subscribers that are already created to some list.

I have the same config.php on both servers so I’m lost, I tried a lot of things and I can’t find what can it be.

This is my config.php:

<?php
    /*

    * ==============================================================================================================
    *
    *
    * The minimum requirements to get phpList working are in this file.
    * If you are interested in tweaking more options, check out the config_extended.php file
    * or visit http://resources.phplist.com/system/config
    *
    * ** NOTE: To use options from config_extended.php, you need to copy them to this file **
    *
    ==============================================================================================================

    */

    // what is your Mysql database server hostname
    $database_host = 'localhost';

    // what is the name of the database we are using
    $database_name = 'phplistdb';

    // what user has access to this database
    $database_user = 'phplist';

    // and what is the password to login to control the database
    $database_password = 'password';

    // if you have an SMTP server, set it here. Otherwise it will use the normal php mail() function
    //# if your SMTP server is called "smtp.mydomain.com" you enter this below like this:
    //#

    define('PHPMAILERHOST', 'host.domain.com');
    define('PHPMAILERPORT',25);
    define('PHPMAILER_SECURE','tls');

    $phpmailer_smtpuser = 'user@domain.com';
    $phpmailer_smtppassword = 'password';

    // if TEST is set to 1 (not 0) it will not actually send ANY messages, but display what it would have sent
    // this is here, to make sure you edited the config file and mails are not sent "accidentally"
    // on unmanaged systems

    define('TEST', 0);
    /*

    ==============================================================================================================
    *
    * Settings for handling bounces
    *
    * This section is OPTIONAL, and not necessary to send out mailings, but it is highly recommended to correctly
    * set up bounce processing. Without processing of bounces your system will end up sending large amounts of
    * unnecessary messages, which overloads your own server, the receiving servers and internet traffic as a whole
    *
    ==============================================================================================================

    */

    // Message envelope.

    // This is the address that most bounces will be delivered to
    // Your should make this an address that no PERSON reads
    // but a mailbox that phpList can empty every so often, to process the bounces

    // $message_envelope = 'listbounces@yourdomain';

    // Handling bounces. Check README.bounces for more info
    // This can be 'pop' or 'mbox'
    $bounce_protocol = 'pop';

    // set this to 0, if you set up a cron to download bounces regularly by using the
    // commandline option. If this is 0, users cannot run the page from the web
    // frontend. Read README.commandline to find out how to set it up on the
    // commandline
    define('MANUALLY_PROCESS_BOUNCES', 0);

    // when the protocol is pop, specify these three
    // $bounce_mailbox_host = '';
    // $bounce_mailbox_user = '';
    // $bounce_mailbox_password = '';

    // the "port" is the remote port of the connection to retrieve the emails
    // the default should be fine but if it doesn't work, you can try the second
    // one. To do that, add a # before the first line and take off the one before the
    // second line
    $bounce_mailbox_port = '110/pop3/notls';

    // it's getting more common to have secure connections, in which case you probably want to use
    //$bounce_mailbox_port = "995/pop3/ssl/novalidate-cert";

    // when the protocol is mbox specify this one
    // it needs to be a local file in mbox format, accessible to your webserver user
    $bounce_mailbox = '/var/mail/listbounces';

    // set this to 0 if you want to keep your messages in the mailbox. this is potentially
    // a problem, because bounces will be counted multiple times, so only do this if you are
    // testing things.
    $bounce_mailbox_purge = 1;

    // set this to 0 if you want to keep unprocessed messages in the mailbox. Unprocessed
    // messages are messages that could not be matched with a user in the system
    // messages are still downloaded into phpList, so it is safe to delete them from
    // the mailbox and view them in phpList
    $bounce_mailbox_purge_unprocessed = 1;

    // how many bounces in a row need to have occurred for a user to be marked unconfirmed
    $bounce_unsubscribe_threshold = 5;

    // choose the hash method for password
    // check the extended config for more info
    // in most cases, it is fine to leave this as it is
    define('HASH_ALGO', 'sha256');

    define('EMAILTEXTCREDITS', 1);
    define('PAGETEXTCREDITS', 1);
    define('ALLOW_ATTACHMENTS', 1);

    define('SEND_QUEUE_PROCESSING_REPORT',false);
    define('WORKAROUND_OUTLOOK_BUG',0);

    define('MAILQUEUE_BATCH_SIZE',0);
    define('USE_DOMAIN_THROTTLE',1);
    define('DOMAIN_BATCH_SIZE',100);
    define('DOMAIN_BATCH_PERIOD',30);

    define('PLUGIN_ROOTDIR', '/var/www/html/lists/admin/plugins');

    define('VERBOSE', true);

    $phpmailer_smtpoptions = array (
        'ssl' => array(
            'verify_peer'  => false,
            'verify_peer_name'  => false,
            'allow_self_signed' => true
        )
    );

@GK5 How many subscribers are you trying to import? Mayby import a smaller number.

A blank page might have some incomplete html behind it. If you “view source” there might be some information on what has happened.

1 Like

@GK5 I can import using php 8.1 but don’t know about mysql 8 because my system has mariadb.

Did you try viewing the source of the “blank” page?
Also try enabling error reporting in file admin/index.php. Add this

error_reporting(-1);

just before line 115 which should be

$systemTimer = new timer();
1 Like

@duncanc I put error_reporting(-1); but I don’t get any report, also I tried with define('VERBOSE', true); in config.php and $er = error_reporting(1); in admin.php and init.php

Viewing the source of the blank page I can’t find anything.

What version of MariaDB do you have ? I can try to install it on the second server and check if it works with MariaDB.

I just installed a new server with php 8.1, mariadb 10.6 and phpList 3.6.6 and I have the same problem.

Just install everything and try to import the same email as the one in the default list and blank screen.

The server is Oracle Linux 8.

@GK5 My mariadb server is 10.1, 10.x seems the latest major version. I’m not sure where you see 15.1.

But unless you can find an error being reported somewhere, php or apache log file, then its hard to know what is happening.

Do the other import pages fail in the same way? there is a simple import by copying/pasting email addresses, and an import of a file that has only email addresses.

1 Like

@duncanc sorry is 10.6 not 15.1.

The problem is on all the lists and only with subscribers that already exist.

@GK5 Can you see whether the mysql setting STRICT_ALL_TABLES is set? That might have an effect on the insert statement.

Also, please clarify which import page you are using.

The screenshots seem to show the reverse of what you think is happening.
The second screenshot (which you marked in red) seems to be importing an existing subscriber, which appears to work. The first screenshot I guess is for a new subscriber.

1 Like

@duncanc STRICT_ALL_TABLES is disabled.

Where I’m trying to import the subscribers is: Subscribers > Subscriber Lists > View members of the list you want to > Import subscriber to this list
Also I tried from Subscribers > Subscriber Lists > Import subscribers icon in the list

Both screenshots are with an existing subscriber, the first one is in the server that doesn’t work and the second one is in my old server that appears to work.

Can you share your mariadb config please ?
I think it is something with mariadb/mysql (I tried both) that needs some settings to be set because I installed all the versions of phpList from 3.5.5 with different versions of mariadb/mysql and php and on all of them it fails.

Many thanks for your help.

@GK5 I can repeat the problem. I think it is a problem caused by using php 8, an exception is being thrown when trying to insert a row that already exists.

That does not happen with php 7.phplist does not check first about an existing row but relies on either the insert returning an error code, or trying to get the unique id for the insert and that indicating the insert did not work.

You should use php 7 for now. Not sure how extensive a problem this might be.

1 Like

@GK5 Seems to be a change in php 8.1 MySQLi: Default error mode set to exceptions - PHP 8.1 • PHP.Watch

That article explains how to configure php to use the earlier behaviour. I guess that will need to be applied to phplist.

1 Like

@duncanc Many thanks for your help, was that.

Just downgraded to php 7.4 and it works perfectly !