gpt4 book ai didi

PHP fwrite();创建额外的角色

转载 作者:行者123 更新时间:2023-11-29 12:49:03 25 4
gpt4 key购买 nike

我正在尝试创建一个 PHP 脚本,通过 $_POST 检索变量,并使用所述变量修改另一个 PHP 文件。但是,每当运行脚本时,要修改的文件的最后 12 个字符都会被复制并连接到文件末尾。

我尝试修改的文件名为database_info.php,如下所示;

<?php
/**
* These are the database login details
*/
define("HOST", "{HOST}"); // The host you want to connect to.
define("USER", "{USER}"); // The database username.
define("PASSWORD", "{PASSWORD}"); // The database password.
define("DATABASE", "{DATABASE}"); // The database name.

ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);

这是我修改database_info.php的PHP脚本

<?php

$host = $_POST['DBhost'];
$name = $_POST['DBname'];
$user = $_POST['DBuser'];
$pass = $_POST['DBpassword'];

echo "<p> Hostname: ", $host ,"</p></br>";
echo "<p> Database: ",$name, "</p></br>";
echo "<p> User: ", $user, "</p></br>";
echo "<p> User: ", $pass , "</p></br>";

$search = array('{HOST}','{USER}','{PASSWORD}','{DATABASE}');
$replace = array($host, $user, $pass, $name);
$file = file_get_contents("database_info.php");
$fh = fopen("database_info.php", 'c');
$file = str_replace($search, $replace, $file);
fwrite($fh, $file);
fclose($fh);

include 'functions.php';
$con = mysqli_connect(HOST, USER, PASSWORD, DATABASE); //create connection, store to variable "con"

// Check connection
if (mysqli_connect_errno($con))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

// Create a table
$sql="CREATE TABLE canvas(name CHAR(30),content CHAR(30))";

// Check if table was created
if (mysqli_query($con,$sql))
{
echo "Table created successfully";
}

else
{
echo "Error creating table: " . mysqli_error($con);
}
?>

当 PHP 脚本使用 $_POST 变量运行时

$host = localhost;
$name = CMS;
$user = root;
$pass = root;

database_info.php 更改为

<?php
/**
* These are the database login details
*/
define("HOST", "localhost"); // The host you want to connect to.
define("USER", "root"); // The database username.
define("PASSWORD", "root"); // The database password.
define("DATABASE", "CMS"); // The database name.

ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);| E_STRICT);

问题出在最后一行,error_reporting(E_ALL | E_STRICT);| E_STRICT); 最后 12 个字符 (| E_STRICT);) 已连接到末尾,导致语法错误。我可以通过在文件末尾添加 12 个额外的注释字符来解决该问题,这样它只复制注释字符,但这是一个不优雅的解决方案,并且不能解决问题。

我注意到添加到database_info.php的变量使其比原来的短了12个字符,这是问题所在吗?我认为问题源于 fwrite(),但我不完全确定。有谁知道为什么我的脚本要添加这些额外的字符?

最佳答案

你的问题出在语句fopen()

如果您阅读了 fopen 的文档,您将使用参数 c 打开文件,这不会截断现有文件,而只是将文件指针放在文件开头。现在,由于您的 POST 值比您的 {..} 值短 12 个字符,因此它不会“覆盖”最后 12 个字符,而是用新字符串替换所有内容.

简单的解决方案是始终在 fopen 中使用 w 。所以

$fh = fopen("database_info.php", 'c');
$file = file_get_contents("database_info.php");

将成为

$file = file_get_contents("database_info.php");
$fh = fopen("database_info.php", 'w');

如果在打开文件进行写入后使用file_get_contents,您将得到空文件来读取

关于PHP fwrite();创建额外的角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25030446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com