【问题标题】:how to run an echo command for terminal through PHP如何通过 PHP 为终端运行 echo 命令
【发布时间】:2018-03-03 16:21:31
【问题描述】:

整天试图通过 php 从<form> 发送邮件,终端命令发送到我的服务器。

原因是我使用 phpmailer 从网站发送邮件,但随后 google 将我的网站标记为非法登录。

所以我认为这可以通过将邮件服务器安装到我的网络服务器并通过它发送邮件来轻松完成。

到目前为止一切顺利,我的邮件服务器设置和来自命令行的邮件效果很好。

但现在是困难的部分:让网站从我的表单中获取变量并将它们放入终端的命令中。

我尝试了几种方法将命令放入变量并执行变量,但到目前为止没有任何效果。

我现在拥有的如下:

PHP部分:

<?php

//Database
require_once 'includes/dbconfig2.php';

// Get our database connector
require("includes/conn.php");

//Class
$reg=new USER($DBcon);

if (isset($_POST['send'])) {
    $from = $_POST['email'];
    $name = htmlspecialchars($_POST['name']);
    $message = nl2br(htmlspecialchars($_POST['message']));
    $email = "mail@to.address";
    $subject = "Hey, ik ben er bij op de trouwerij!";
    $contentmail = '<? echo "echo "<b>Bedankt voor het melden.</b><br><br>Mail van: Willem<br>Mail adres: mail@from.address<br><br><b>Bericht:</b><br><br>test" | mail -s "$(echo -e "Hey, ik ben er bij op de trouwerij.\nContent-Type: text/html")" mail@to.address "?>';
}




if (empty($_POST) === false) {
    $errors = array();



if (empty($name) === true || empty($email) === true || empty($message) === true) {
    $errors[] = '<p><font color="#FF0000">Naam, email en bericht zijn verplicht!</p>';
} else {
    if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
    $errors[] = '<p><font color="#FF0000">Dat is geen geldig email adres</p>';
    }
    if (ctype_alpha(str_replace(array(' ', "'", '-'), '', $name)) === false) {
        $errors[] = '<p><font color="#FF0000">Naam mag enkel letters bevatten</p>'; 
    }
}
if (empty($errors) === true) {
    (shell_exec('$contentmail'));
 {
     if(true)
     {
    header('Location: sent.php?sent'); 
    exit();//redirect user  
     }
 }

}
}

?>

还有形式:

<form class="form-inline" action="index.php" method="post">
            <div class="row animate-box">
                <div class="col-md-12 col-md-offset-1">

                    <div class="col-md-2 col-sm-4">
                        <div class="form-group">
                        </div>
                    </div>

                    <div class="col-md-6 col-sm-4">
                        <div class="form-group">
                            <label for="name" class="sr-only">Naam</label>
                            <input type="text" class="form-control" name="name" id="name" placeholder="Uw naam"<?php if (isset($_POST['name']) === true) {echo 'value="', strip_tags($_POST['name']), '"'; }?>/>
                        </div>
                    </div>

                    <div class="col-md-4 col-sm-4">
                        <div class="form-group">
                        </div>
                    </div>                  

                </div>
                </div>  
            <div class="row animate-box">
                <div class="col-md-12 col-md-offset-1">

                    <div class="col-md-2 col-sm-4">
                        <div class="form-group">
                        </div>
                    </div>

                    <div class="col-md-6 col-sm-4">
                        <div class="form-group">
                            <label for="name" class="sr-only">Email</label>
                            <input type="email" class="form-control" name="email" id="email" placeholder="Email"<?php if (isset($_POST['email']) === true) {echo 'value="', strip_tags($_POST['email']), '"'; }?>/>
                        </div>
                    </div>

                    <div class="col-md-4 col-sm-4">
                        <div class="form-group">
                        </div>
                    </div>

                </div>
            </div>
            <div class="row animate-box">
                <div class="col-md-12 col-md-offset-1">

                    <div class="col-md-2 col-sm-4">
                        <div class="form-group">
                        </div>
                    </div>

                    <div class="col-md-6 col-sm-4">
                        <div class="form-group">

                            <label for="message" class="sr-only">Bericht:</label>
                            <textarea class="form-control" rows="5" name="message" id="message" placeholder="Bericht"/><?php if (isset($_POST['message']) === true) {echo strip_tags($_POST['message']) ; }?></textarea>

                        </div>
                    </div>

                    <div class="col-md-4 col-sm-4">
                        <div class="form-group">
                        </div>
                    </div>

                </div>
            </div>
            <div class="row animate-box">
            <div class="col-md-12 col-md-offset-1">

                <div class="col-md-3 col-sm-4">
                    <div class="form-group">
                    </div>
                </div>

                <div class="col-md-4 col-sm-4">
                    <input class="btn btn-default btn-block" type="submit" name="send" value="Ja, ik ben er bij!" style="left: auto"/>
                </div>

                <div class="col-md-5 col-sm-4">
                    <div class="form-group">
                    </div>
                </div>
                </div>
            </div>
        </form>

有人可以帮我解释一下为什么这段代码没有在服务器的终端/shell 上执行,以及如何让它工作吗?

提前致谢!

编辑:制作了一个 bash 脚本来接管我在变量中的命令,并让 exec 命令执行 bash 脚本。该脚本本身可以从终端在服务器上运行,但页面上没有运气。由于某种原因,我的页面不断重新加载到 index.php 而不是执行脚本,而只有执行和变量的 php 确实可以工作。

【问题讨论】:

  • 我会将行写入一个名为 mail_queue 之类的数据库表,其中包含所有必需的参数,以将正确的电子邮件发送到正确的位置。然后让您的命令行脚本读取该表并创建电子邮件。实际上是一项 CRON 工作
  • 是的,但这不是我想做的,我想学习如何从终端执行命令...我现在制作了一个 bash 脚本,可以发送邮件但仍然没有得到它的工作原理是 php 执行脚本以便发送邮件......

标签: php shell email exec


【解决方案1】:

此代码:shell_exec('$contentmail') 正在尝试执行字符串 $contentmail,而不是其内容。这就是 PHP 中single and double quoted strings 的区别。

第二个问题是$contentmail 变量的内容——shell 会尝试运行&lt;? echo "echo "&lt;b&gt;Bedankt voo...,这不是一个有效的命令。

如果您有自己的服务器并安装了 SMTP 服务器,您可以尝试使用 PHP 的内置函数 mail() 发送电子邮件或(更好)在本地使用 PHPMailer。

【讨论】:

  • 因为我改变了我想要这样做的方式......我现在制作了一个包含命令而不是变量的 bash 脚本,我想让 php 执行脚本,但是对于某些未执行的原因...我现在拥有的方式在这里:pasted.co/cfafa372
  • PS:我想学习如何从终端执行它或让 php 执行 bash 脚本而不是使用简单的方法;)
  • 好的,找到问题了。似乎不起作用的执行实际上正在执行,但是没有邮件被发送到没有maildir的www-data,并且重新加载是由于我在进行其他一些编辑时不小心做了一个错误的编辑......
猜你喜欢
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 2020-09-07
  • 2017-01-25
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多