str_replace() 在返回空字符串的 aws 服务器中不工作,但在 cpanel 和本地工作

str_replace() is not working in aws server returning empty string but working on cpanel and locally

我正在开发一个 laravel 拼车应用程序,对于设置数据,我使用了一个配置文件。之后使用 str_replace 和 file_put_contents 更改任何值使用文件 file_get_contents 以更新值。 这是一些代码示例:

$config = base_path() . '/config/constants.php';
$file = file_get_contents($config);
$change_content = $file;
foreach ($request->all() as $key => $value) {

        $value = (trim($value) == 'on') ? '1' : trim($value);
        $searchfor = config('constants.' . $key);
        if ($value != $searchfor) {
            $search_text = "'" . $key . "' => '" . $searchfor . "'";
            $value_text = "'" . $key . "' => '" . $value . "'";
            $change_content = str_replace($search_text, $value_text, $change_content);
        }

        file_put_contents($config, $change_content);
    }

但是 $change_content 在 AWS 服务器中 return 没有任何值

注意:这在我的本地计算机上也适用于 Cpanel,但在 AWS ec2 中不起作用。我在 Ubuntu 20.04 中使用 php7.4,Nginx。 Cpanel、本地和 AWS ec2 的配置相同。

谁能告诉我 str_replcae 有什么额外的配置吗??

NOTE: No there is no extra addon/extension in PHP for str_replace. str_replace() is built in string function on PHP 4, PHP 5, PHP 7, PHP 8.

在您的代码中,可能存在 2 个错误。由于您的代码是 运行 本地的,并且您的文件具有写入权限。

  1. 第一点是 - 您的 /config/constants.php 文件太大,这就是 foreach 循环花费太多时间并退出它的原因,但为此 PHP 应该抛出错误。
  2. 第二点是 - 您正在使用 laravel 配置和来自 bootstrap/cache/config.php$searchfor 变量。您正在用配置缓存值替换该值,但也许您的 /config/constants.php 没有这个确切的键值或它们之间有一些空格。我想你明白我的意思了。

检查这些东西是否正确?

  • 确保您的文件存在于正确的目录中并具有写入权限
  • 确保您的本地和服务器 constants.php 具有相同的内容
  • 手动或通过 运行 删除您的 bootstrap/cache/config。php php artisan config:cache 此命令再次重新缓存您的配置。