在我的网络应用程序中,用户可以下载包含应用程序文件的.tar.gz存档。但是,由于之后尚未配置MySQL数据库,因此用户需要运行./install
中的安装脚本。
通过检查./install
目录是否存在,我在第一次运行应用程序时“抓住”了用户。如果是这样,index.php页面会将用户重定向到安装脚本。
但是,我想知道在首次运行程序时是否有一种更优雅的方式来“捕获”用户。
IRC上有人建议web服务器在完成时创建文件.installed
,但由于Web服务器可能没有对Web根目录的写权限,所以我不能依赖它。
你将如何解决这个问题,或者我的解决方案是否可行?
答案 0 :(得分:3)
当MySQL查询失败并显示错误代码1146
时,表示表不存在。您可能正在寻找此类错误,因为它们或者意味着软件未安装,或者安装已损坏。
正如Julian H. Lam在评论中所说,mysql_errno()
函数返回错误编号。对于MySQLi,它可以是属性$connection->errno
,也可以是函数调用mysqli_errno($link)
。
答案 1 :(得分:0)
除了您提供的解决方案之外,我认为您的反应相反:在您的tar中添加.not-installed
文件并在安装完成后删除。
答案 2 :(得分:0)
大多数网络应用程序(wordpress,drupal等)都认为当文件中缺少设置或存在文件时,它是首次运行的条件。 通过删除或强制用户在首次运行应用程序时删除文件,您还可以保证安全性,因为无法通过删除或更改文件名来重新配置应用程序...这可能比创建一个新文件并模拟其内容。
更高级的框架将读取和修改配置文件以指示首次运行。 在Zend Framework应用程序中,您将阅读,然后修改其中一个安装配置文件。
由于Web应用程序在收到请求时会执行代码,因此应删除不希望再次执行的代码,也不应删除“public”目录之外的代码。 与重新设置的设置密切相关的项目会完全删除设置文件。
在您的安装中,您可以检查URL根目录的写入权限,如果缺少它们,请告诉用户删除setup.php(例如)
$delete = False; $dir = dirname(__FILE__); if(is_writeable(__FILE__)) { if(unlink(__FILE__)) { $delete = True; } } if(!$delete) { $file = __FILE__ print "IMPORTANT please remove/rename the file {$file} to complete installation" }