【问题标题】:How to change variable value in another php file如何更改另一个php文件中的变量值
【发布时间】:2018-02-01 12:02:35
【问题描述】:

基本上,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");

【问题讨论】:

  • 我不明白你想说什么。你能把你的修复应用到我的代码上吗?所以我可以看到你建议在哪里进行更改。
  • 所以你想把$email='some@valu.tld'替换成$email='test@gmail.com'?如果这是真的,为什么需要这样做?
  • 我的 API 需要它。
  • 某个评论消失的人提供的修复。我试过 $$varname 它似乎可以工作,但它会将文件中其他变量名的值更改为电子邮件。
  • 我投票决定将此问题作为离题结束,因为该问题的谓词无效,并且发帖人询问如何实施一个非常危险的解决方案。

标签: php


【解决方案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;

“config.php”在哪里

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

Session 如果你设置了一个 Email 的 session 变量,那么你可以在同一个 session 中的任何文件中使用它

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("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);

以上所有方法都是安全的方法来更改外部代码文件中的变量,而不会使您的系统被黑客入侵

【讨论】:

  • 我不想打印 $email 也不想使用它。只想替换文件中的email值,不影响文件中的其他变量。
  • 打印只是一个示例,说明如何在不更改文件的情况下影响文件中变量的值
  • 我不想这样做。你能建议 preg_replace 方式吗?如果我定义了确切的电子邮件值,我可以操纵电子邮件值,但我不希望我想要的是在不知道变量值的情况下更改变量值。
  • 正如我所说,直接编辑您的源 PHP 文件存在安全风险,您的 API 不能要求该功能,您的 API 需要更改 $email 变量的值,其中写入文件是错误的方法,我提供了几种方法。
猜你喜欢
  • 2019-07-30
  • 2021-05-09
  • 2021-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 2020-02-18
  • 1970-01-01
相关资源
最近更新 更多