Ошибка 404 с cgi-bin perl

Обновить

Чтобы попытаться упростить проблему, я сделал следующий файл (dbtest.pl)

#!/usr/bin/perl
use DBI;
use DBD::mysql;

print "Content-type: text/html \n\n";
print "hi";

Я ожидаю, что он загрузит страницу и скажет "привет". Тем не менее, это дает мне ошибку 404 от WordPress. Это просто случай, когда что-то не так с использованием DBD::mysql? Возможно, он неправильно установлен на моем сервере?

Оригинальный пост

До недавнего времени у меня был простой Perl, работающий над обновлением столбца базы данных до "обработанного" после выполнения транзакции.

По какой-то причине это перестало работать. Сначала я подумал, что это как-то связано с установкой WordPress, которая выполняется для корня сайта и mod_rewrite, потому что, когда я пытался получить прямой доступ к pl, он перенаправлял меня на страницу WordPress 404.

Однако когда я начал тестировать с базовыми сообщениями типа perl 'print 'hello world', все казалось работающим.

Кажется, что когда я включаю строку 'use DBD::mysql;' страница будет перенаправлена ​​на 404. Если я удалю эту строку, работает следующий код (до тех пор, пока он не попытается получить доступ к базе данных).

Если кто-то может увидеть что-то не так в следующем коде или у вас есть предложения по устранению проблемы, это будет очень цениться! (также, если мне нужно уточнить вопрос, дайте мне знать)

#!/usr/bin/perl

# PERL MODULES WE WILL BE USING
use DBI;
use DBD::mysql;
use CGI;
use MIME::Lite;
use Email::Valid;
use HTML::Entities ();
use CGI qw/:standard/;

$ok_chars = 'a-zA-Z0-9 ,-@';
$messageclean = "";
foreach $param_name ( param() ) {
    $_ = HTML::Entities::decode( param($param_name) );
    $_ =~ s/[^$ok_chars]//go;
    param($param_name,$_);
}

local $query = new CGI;

# read in the cgi fields.
local $input_payment_reference = $query->param('payment_reference');
local $input_email = $query->param('Your_Email');
local $reference = $query->param('Transaction_ID');

# the reference is the last couple of digits, without the first 2 characters
$input_payment_reference = substr($reference, 2);

$msg = MIME::Lite->new(
                 To      =>$input_email,
                 From       =>'admin@admin.com',
                 Subject =>'Message',
                 Type    =>'multipart/related'
                 );
    $msg->attach(Type => 'text/html',
                 Data => qq{
<html>
<body>
<table rules="all" style="border-color: #666;" cellpadding="10">
<tr><td style="background: #eee;"><strong>Transaction ID:</strong> </td><td style="background:#fff;"> $input_payment_reference </td></tr>
</table>
<p>Thank you for registering</p>
</body>
</html>
                            }
                 );                                                             

# HTTP HEADER
print "Content-type: text/html \n\n";

# CONFIG VARIABLES
$platform = "mysql";
$database = "database";
$host = "localhost";
$port = "3306";
$tablename = "table";
$user = "user";
$pw = "password";

# DATA SOURCE NAME
$dsn = "dbi:$platform:$database:$host:$port";

# PERL DBI CONNECT
$connect = DBI->connect($dsn, $user, $pw) or die "Can't connect to the DB: $DBI::errstr\n";

# PREPARE THE QUERY
$query = "UPDATE $tablename SET orderStatus = 'processed'
WHERE transactionID = '".$input_payment_reference."'";

$query_handle = $connect->prepare($query);

# EXECUTE THE QUERY
$query_handle->execute();

# SEND EMAIL
$msg->send();

0 ответов

Другие вопросы по тегам