Mysql 404 cgi bin perl错误
更新 为了简化问题,我创建了以下文件(dbtest.pl) 我希望它加载页面并说“嗨”。然而,它给了我一个来自wordpress的404错误。这只是使用DBD::mysql出现问题的一个例子吗?它可能没有正确安装在我的服务器上吗 原创帖子 直到最近,我还做了一些简单的perl工作,在事务完成后将数据库列更新为“已处理” 由于某种原因,这已经停止工作。起初,我认为这与正在为网站root和mod_rewrite运行的wordpress安装有关,因为当我试图直接访问pl时,它将我重新路由到wordpress 404页面 然而,当我开始使用基本的perl“print”“hello world”类型的消息进行测试时,一切似乎都正常 似乎当我包括“usedbd::mysql;”这一行时页面将重定向到404。如果删除该行,以下代码将正常工作(直到它尝试访问数据库为止) 如果有人能在下面的代码中看到错误,或者对如何解决问题有建议,我们将不胜感激!(另外,如果我需要改进问题,请告诉我)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
#/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();