file = $argv[1]; $this->key = $argv[2]; $this->value = $argv[3]; break; case 3: $this->file = $argv[1]; $this->key = $argv[2]; $this->value = fgets(STDIN); break; default: echo "usage: php8.0 putenv.php filename key value echo value | php8.0 putenv filename key"; throw new Exception("invalid params"); } if (!file_exists($this->file)) { throw new Exception('File not found'); } $changed = 0; $lineWasEmpty = false; $key = $this->key; $value = $this->value; if (strpos($value, ' ') !== false) { $value = '"' . addslashes($value) . '"'; } $this->content = file($this->file); foreach ($this->content as $l => $line) { if (strlen(trim($line)) < 1) { if ($lineWasEmpty) { $this->content[$l] = null; } else { $lineWasEmpty = true; } continue; } $lineWasEmpty = false; if (!str_starts_with($line, $this->key)) { continue; } $next = trim(substr($line, strlen($this->key))); if (strlen($next) === 0 || $next[0] !== '=') { continue; } $this->content[$l] = $key . '=' . $value; $changed++; } if ($changed === 0) { $this->content[] = $key . '=' . $value; } else if ($changed > 1) { echo "Key $key changed $changed times\n"; } $content = $this->content; $this->content = []; foreach ($content as $line) { if ($line !== null) { $this->content[] = $line; } } $content = implode('', $this->content); file_put_contents($this->file, $content); } } new PutEnv();