如何在另一个php文件中更改变量值

时间:2018-02-01 12:02:36

标签: php

基本上,file.php有变量名$ email,其值必须更改。这是我做了多远,它似乎不起作用:

function updateFile($email) {

$file = 'file.php';
$content = file_get_contents($file, NULL);
$varname = '$email';
$newvalue = $email;
$content = preg_replace('/('. preg_quote($varname) .'=")[^"]+(")/', 
$varname."=\"".$newvalue."\"", $content);
file_put_contents($file, $content);

}

updateFile("test@gmail.com");

1 个答案:

答案 0 :(得分:1)

对此最好的答案是,即使你可以,也不应该,允许远程重写服务器文件是一个巨大的安全风险

至于为何不安全,可以说你的file.php包含

$ email =" defaultValue";

然后我使用您的函数将电子邮件设置为"; file_put_contents("file.php", ""); $junk = "

之后你的file.php会读

$email = ""; file_put_contents("file.php", ""); $junk = "";

然后当你运行file.php时它会自行擦除

更好的方法来做你正在描述的事情

参数所以在file.php中你有一个函数接受$ email作为参数并使用

文件包含

如果您有此代码

$email = "blah@foo.bar";
include('file.php');

其中" file.php'是

<?php echo $email;?>

将输出blah@foo.bar

你也可以将它与配置文件

结合起来

include('config.php');
echo $email;

其中&#34; config.php&#39;是

<?php $email = "blah@foo.bar";?>

会话如果您设置了电子邮件的会话变量,那么您可以在同一会话中的任何文件中使用该变量

if(!isset($_SESSION))
{
    session_start();        
}
$email = "defaultValue"
if (array_key_exists("email", $_SESSION)) 
    $email = $_SESSION["email"];

编辑:澄清上面的示例,因为您在构思时遇到了问题

通过参数发送电子邮件

假设你有一个PHP文件

function SendEmail(array $email)
{
    $transport = Swift_SmtpTransport::newInstance();
    $transport->setLocalDomain();


    // Create the message
    $message = Swift_Message::newInstance();

    $message->setTo($email);
    $message->setSubject("This email is sent using Swift Mailer");
    $message->setBody("Test");
    $mailer = Swift_Mailer::newInstance($transport);
    return $mailer->send($message);
}

或使用外部定义的变量

$email = "blah@foo.bar";
include('file.php');

其中file.php是

$transport = Swift_SmtpTransport::newInstance();
$transport->setLocalDomain();


// Create the message
$message = Swift_Message::newInstance();

$message->setTo($email);
$message->setSubject("This email is sent using Swift Mailer");
$message->setBody("Test");
$mailer = Swift_Mailer::newInstance($transport);
return $mailer->send($message);

$email = "blah@foo.bar";
include('file.php');

或使用会话

function updateEmail($email) {

    if(!isset($_SESSION))
    {
        session_start();        
    }
    $_SESSION["email"] = $email;
}

updateEmail(&#34; test@gmail.com");

其中file.php是

if(!isset($_SESSION))
{
    session_start();        
}
$email = "defaultValue"
if (array_key_exists("email", $_SESSION)) 
    $email = $_SESSION["email"];

$transport = Swift_SmtpTransport::newInstance();
$transport->setLocalDomain();


// Create the message
$message = Swift_Message::newInstance();

$message->setTo($email);
$message->setSubject("This email is sent using Swift Mailer");
$message->setBody("Test");
$mailer = Swift_Mailer::newInstance($transport);
return $mailer->send($message);

以上所有内容都是安全的方法来更改外部代码文件中的变量而不打开系统进行黑客攻击