【发布时间】:2014-12-11 08:53:51
【问题描述】:
我在尝试使用 ssh 远程执行 php 文件时遇到问题。 php 文件应该创建一个 json 文件并回显“hi”。它回显“hi”,但从不创建 JSON 文件。
所有文件和目录都设置为 -rwxrwxrwx 或 drwxrwxrwx。只有两台服务器上的用户名都是“root”。应用服务器的密码已预先保存在主服务器上。
主服务器
ssh root@xxx.xxx.xxx.xxx 'php /test/example/makeconfig.php'
应用服务器
makeconfig.php
<?php
$return_arr = array('ID' => 50, 'password' => "testpassword");
$json_data = json_encode($return_arr);
file_put_contents("config.json", $json_data);
echo "hi";
?>
我从控制台的主服务器运行代码。它会在主服务器的控制台屏幕上输出“hi”,但是当我转到应用程序服务器时,它不会创建文件“config.json”。如果我运行命令
php /test/example/makeconfig.php
在应用服务器上,它将输出“hi”并创建 config.json 文件。
我只是不确定如果从远程服务器执行 php 文件,为什么不会创建配置文件。 感谢您的帮助。
【问题讨论】:
-
我删除了描述中大写“请勿使用”的标签。
-
脚本本身并没有失败,因为你得到了回声,但也许
file_put_contents失败了。你试过检查它的结果吗?它根据结果返回一个整数或false。另外,您是否尝试过指定完整路径以确保文件存储在正确的目录中? -
当你运行命令并且它们工作时,你是从 root 的主目录以 root 身份运行它们吗?
-
php 脚本是否有权写入其工作目录?您是否尝试检查 file_put_contents()
=== false的返回值?您可以在显示错误或记录错误的环境中运行吗? -
只是一个建议,您不应该允许通过 ssh 使用 root,因为它是一个漏洞。我认为问题在于,当您执行
php /test/example/makeconfig.php时,该文件正在您执行 PHP 文件的目录中创建,因此很可能该文件已创建,但不是您预期的位置,而是主文件夹。为确保文件已创建,请检查file_put_contents()是否也未返回false。也尝试cd /test/example/然后php makeconfig.php