1

我在我的 drupal 站点中添加了一些 php 代码。当我尝试运行它时,它会显示如下警告

“警告:有关 php_eval() 中的故障(/folderpath../modules/php/php.module 的第 80 行),请联系支持人员。”

在该 php.module 的第 80 行包含

ob_start();
print eval('?>' . $code);
$output = ob_get_contents();
ob_end_clean();

实际上这是一个发送邮件的php代码......

任何人都请帮助找出这个...

提前致谢

这是我为发送邮件编写的代码...

    $strTo = $_POST["txtTo"];
$strSubject = $_POST["txtSubject"];
$strMessage = nl2br($_POST["txtDescription"]);

//*** Uniqid Session ***//
$strSid = md5(uniqid(time()));

$strHeader = "";
$strHeader .= "From: ".$_POST["txtFormName"]."<".$_POST["txtFormEmail"].">\nReply-To: ".$_POST["txtFormEmail"]."";

$strHeader .= "MIME-Version: 1.0\n";
$strHeader .= "Content-Type: multipart/mixed; boundary=\"".$strSid."\"\n\n";
$strHeader .= "This is a multi-part message in MIME format.\n";

$strHeader .= "--".$strSid."\n";
$strHeader .= "Content-type: text/html; charset=utf-8\n";
$strHeader .= "Content-Transfer-Encoding: 7bit\n\n";
$strHeader .= $strMessage."\n\n";

//*** Attachment ***//
if($_FILES["fileAttach"]["name"] != "")
{
    $strFilesName = $_FILES["fileAttach"]["name"];
    $strContent = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"]["tmp_name"]))); 
    $strHeader .= "--".$strSid."\n";
    $strHeader .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n"; 
    $strHeader .= "Content-Transfer-Encoding: base64\n";
    $strHeader .= "Content-Disposition: attachment; filename=\"".$strFilesName."\"\n\n";
    $strHeader .= $strContent."\n\n";
}


$flgSend = @mail($strTo,$strSubject,null,$strHeader);  // @ = No Show Error //

if($flgSend)
{
    echo "Mail send completed.";
}
else
{
    echo "Cannot send mail.";
}
4

2 回答 2

1

看起来您的主机不允许执行该eval()功能,这很常见,因为它可以在各种漏洞利用脚本中用于入侵服务器。他们可能不允许您使用它,因为它可能会危及整个服务器,您需要更改主机!

于 2013-02-27T11:13:18.213 回答
0

更改主机不会解决问题,我的 Ubuntu 服务器允许 eval() 函数,但我在 Apache 日志中报告了相同的错误:

  1. 这是 Apache 错误:PHP Parse error: syntax error, unexpected T_STRING in /home/websites/domainname/modules/php/php.module(80) : eval()'d code on line 3

2.php.module正在使用函数“php_eval:你可以在这里查看:http: //api.drupal.org/api/drupal/modules%21php%21php.module/function/php_eval/7

第 80 行是这样的: print eval('?>' . $code);

如果我删除 . $code 然后没有错误报告,所以我不认为它的 php 标签。网站没有故障,只是每个访问者的错误日志都在增长。

  1. 您可以使用以下代码测试是否允许 eval() 函数并在您的服务器上运行:

进一步注意,我使用的是 GoVideo 主题,并且 eval 函数脚本在首页底部显示 3 个 url。这 3 个 URL 指向 Youtube、Flickr 和 facebook。您可以在此处查看它们(漫步到底部)。 http://govideo.themesnap.net/

说清楚;如果我删除 $code 变量,那么我会丢失首页上的 3 x Urls。

于 2013-03-13T10:46:06.217 回答