Ошибка 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();