在几个请求中同时安全地使用ini_set?

时间:2014-03-15 17:37:58

标签: php email concurrency ini-set

我的服务器上的php文件中有一个邮件脚本。 邮件脚本使用php" mail"使用ini_set函数和设置选项然后发送邮件。

该脚本可通过http帖子调用,该帖子通过正文/内容和查询字符串向脚本发送选项。

现在,我的问题是:我可以安全地调用邮件php,它可以同时使用ini_set设置选项几次,还是运行脚本的不同实例会覆盖其他选项?

<?php
parse_str($_SERVER['QUERY_STRING']);

// $to is filled in by parse_str taking it from the query string
// $subject is filled in by parse_str taking it from the query string

$message = file_get_contents('php://input'); // $message is taken from the body/contents

$from = "from@mail.com";
$headers = "From:" . $from . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
ini_set( "sendmail_from", "from@mail.com" ); 
ini_set( "SMTP", "theHost" );  
ini_set( "smtp_port", "25" );
ini_set("username","uname"); 
ini_set("password","pwd");

if(mail($to,$subject,$message,$headers) == true){
    echo "1";
}else{
    echo "0";
}
?>

该脚本正在运行,但如果我尝试同时运行它,我不确定它是否可能会中断。

我有这个脚本的原因是因为我的主机只允许我从服务器内发送无限数量的电子邮件。

也许我甚至可以显示我称之为脚本的代码。它在C#中编程并在多个线程中运行。如您所见,我可以调用受#(锁定)锁定的脚本(emailLock)&#34;确保同时只对该脚本进行一次调用。我想知道是否有可能在没有任何搞砸的情况下移除此锁

string URI = String.Format("http://addressToThePhpScript.php",
    HttpUtility.UrlEncode("to@email.com"),
    HttpUtility.UrlEncode("The subject"));

using (WebClient wc = new WebClient()){
    wc.Headers[HttpRequestHeader.ContentType] = "text/plain";

    string response;

    lock(emailLock){
        response = wc.UploadString(URI, body.ToString());
    }

    if (response == "1"){
        //Success
    }else{
        throw new Exception("Email could not be sent");
    }
}

1 个答案:

答案 0 :(得分:2)

在运行一些测试之后,我得出结论,在几个请求中同时使用set_ini确实应该是安全的。