2

我想从我的 PHP 应用程序中读取一些数据并将其写入文本文件。它的数据量很小。真的只是配置。

我担心的是我无法控制部署环境。它将是服务器、mac 和 windows 的混合包。它们都将运行 PHP5.3 或更高版本。mac 服务器将有 apache,windows 服务器将运行 IIS。

我不希望客户致电询问与服务器设置和/或文件/文件夹权限相关的问题。

我很确定 WordPress 一直都这样做,所以我知道这是可以干净地做到的。问题是如何?有没有人有任何可以帮助我实现目标的建议、库指针或策略。

我为此排除了 sqlLite,因为我认为它在 windows 上默认不启用,并且我认为它不再默认安装在 php5.4 windows 上。我的主要目标是能够以这样一种方式持久保存少量数据,从而使我的支持成本飙升。

4

3 回答 3

1

所有常见的大型 PHP 项目执行它的方式只是为它保留一个文件夹,并在安装时检查它的权限。

您可以轻松地在您的 webroot 中创建一个/gen/data文件夹,并在安装/更新时检查它:

  1. 包含一个.htaccess文件,说明deny from all网络服务器是否为 Apache,或其他网络服务器上的等效保护方法(仅file_get_contents通过公共 URL 进行测试)
  2. is_writable(您也可以写入、读取和删除一个小样本文件来确保这一点)

将您的文件放在那里,它在每个平台上都是安全且便携的。

一些示例代码:

$docroot = $_SERVER['DOCUMENT_ROOT'];
$dataroot = $docroot.'/data';
$testfile = $dataroot.'/test.txt';
$publicURL = $youHaveThisSomewhere.'/data/test.txt';
if(!is_dir($dataroot))
  die("The required data folder is not present at $dataroot");
if(!is_writable($dataroot) || file_put_contents($testfile, 'test') === FALSE)
  die("Data path ($dataroot) is not writable, make it so!");
if(file_get_contents($publicURL) !== FALSE)
  die("Data path is publicly accessible, go fix it!");
if(!unlink($testfile))
  die("I also need delete rights in the data folder!");

die("Installation successful!");
于 2013-05-22T16:00:49.127 回答
0

是的,但即使使用 Wordpress,您也必须担心使某些文件和目录可写(chmod、windows 文件权限等)。

如果我没记错的话,Joomla/Wordpress(至少其中之一)也让您有机会输入 FTP 凭据,因此它不会通过文件系统编辑文件,而是尝试通过 FTP 服务器上传编辑后的版本。

你可以做的就是有一个必须在文本编辑器中编辑的配置文件。并让文本文件只读用于网络服务器/应用程序。但是随后无法通过网站本身更改这些设置之一,而是需要一个人在文本编辑器中编辑文本文件。

如果您已经在使用数据库,那么只有数据库设置必须在配置文件中。其余的可以存储在数据库中。

于 2013-05-22T15:58:46.447 回答
0

我认为您可能正在寻找的选项涉及以下步骤:

在这个安装脚本文件中创建一个安装文件:

  1. 查看目录是否可写
  2. 如果不要求提供 FTP 凭据
  3. 确定系统类型 Windows 或 *Nix bassed
  4. 建立 FTP 连接
  5. *nix 变体发送 CHMOD 命令 Windows 发送 CACLS 命令以使目录可写
  6. 终止 FTP 命令
于 2013-05-22T16:21:02.330 回答