Mysql 404 cgi bin perl错误

Mysql 404 cgi bin perl错误,mysql,wordpress,perl,cgi-bin,Mysql,Wordpress,Perl,Cgi Bin,更新 为了简化问题,我创建了以下文件(dbtest.pl) 我希望它加载页面并说“嗨”。然而,它给了我一个来自wordpress的404错误。这只是使用DBD::mysql出现问题的一个例子吗?它可能没有正确安装在我的服务器上吗 原创帖子 直到最近,我还做了一些简单的perl工作,在事务完成后将数据库列更新为“已处理” 由于某种原因,这已经停止工作。起初,我认为这与正在为网站root和mod_rewrite运行的wordpress安装有关,因为当我试图直接访问pl时,它将我重新路由到wordpr

更新

为了简化问题,我创建了以下文件(dbtest.pl)

我希望它加载页面并说“嗨”。然而,它给了我一个来自wordpress的404错误。这只是使用DBD::mysql出现问题的一个例子吗?它可能没有正确安装在我的服务器上吗

原创帖子

直到最近,我还做了一些简单的perl工作,在事务完成后将数据库列更新为“已处理”

由于某种原因,这已经停止工作。起初,我认为这与正在为网站root和mod_rewrite运行的wordpress安装有关,因为当我试图直接访问pl时,它将我重新路由到wordpress 404页面

然而,当我开始使用基本的perl“print”“hello world”类型的消息进行测试时,一切似乎都正常

似乎当我包括“usedbd::mysql;”这一行时页面将重定向到404。如果删除该行,以下代码将正常工作(直到它尝试访问数据库为止)

如果有人能在下面的代码中看到错误,或者对如何解决问题有建议,我们将不胜感激!(另外,如果我需要改进问题,请告诉我)

#/usr/bin/perl
#我们将使用的PERL模块
使用DBI;
使用DBD::mysql;
使用CGI;
使用MIME::Lite;
使用电子邮件::有效;
使用HTML::Entities();
使用CGI qw/:标准/;
$ok_chars='a-zA-Z0-9,-@';
$messageclean=“”;
foreach$param_名称(param()){
$\=HTML::Entities::decode(param($param_name));
$\uu=~s/[^$ok\u chars]//开始;
参数($参数名称,$);
}
本地$query=新CGI;
#在cgi字段中读取。
本地$input_payment_reference=$query->param('payment_REFENCE');
本地$input_email=$query->param(“您的_email”);
本地$reference=$query->param('Transaction_ID');
#引用是最后两位数字,没有前两个字符
$input\U payment\U reference=substr($reference,2);
$msg=MIME::Lite->new(
收件人=>$input\u电子邮件,
From=>'admin@admin.com',
主题=>'Message',
类型=>“多部分/相关”
);
$msg->attach(Type=>text/html),
数据=>qq{
交易ID:$input\U payment\U reference
谢谢你的注册

} ); #HTTP头 打印“内容类型:text/html\n\n”; #配置变量 $platform=“mysql”; $database=“database”; $host=“localhost”; $port=“3306”; $tablename=“table”; $user=“user”; $pw=“密码”; #数据源名称 $dsn=“dbi:$platform:$database:$host:$port”; #PERL DBI连接 $connect=DBI->connect($dsn,$user,$pw)或die“无法连接到数据库:$DBI::errstr\n”; #准备查询 $query=“更新$tablename SET orderStatus='processed' 其中transactionID=“$input\U payment\U reference.”; $query\u handle=$connect->prepare($query); #执行查询 $query_handle->execute(); #发送电子邮件 $msg->send();
我建议您查看服务器错误日志,以了解所给出的确切消息。很明显,您的数据库连接无法正常工作,因此可能需要先在独立脚本中工作,以获得更快的反馈?您可以使用CGI::Carp qw(fatalsToBrowser);这应该会显示错误并使调试更容易。感谢您的想法,我尝试了一些更改,甚至没有尝试访问数据库。使用CGI::Carp qw(fatalsToBrowser);似乎不会对新的测试代码产生影响…您应该添加
使用严格的
使用警告
,甚至
使用诊断
,以获取更多有关出错原因的信息。再次感谢您提供更多建议。我试着使用所有这些,但我仍然留下了WordPress404页面。错误日志似乎什么也没说。我可能需要在另一台主机上尝试更多的测试,看看这是否与服务器有关,而不是与代码有关。
#!/usr/bin/perl
use DBI;
use DBD::mysql;

print "Content-type: text/html \n\n";
print "hi";
#!/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();