如何在共享主机上使用PHP创建public_html之外的文件

4
我正在尝试在php中创建一个公共_html之外的文件:fopen("/home/sites/foo.org/backup-ticketing/asu.sql";w)。但是我收到了这个错误消息。我确信我应该可以通过某种方式做到这一点,只是我无法弄清楚。文件夹的权限为711
[Wed Aug 01 14:33:54 2012] [error] [client 84.3.2.16] PHP警告:fopen(/home/sites/foo.org/backup-ticketing/asu.sql) [function.fopen]:无法打开流:操作不允许 in /home/sites/foo.org/public_html/back/asu.php on line 4
请告诉我正确的方法,谢谢你的帮助。另外我有额外的信息:php.ini是公共_html的问题,但我想保持原样,/back/文件夹应该能够这样做。以下是我的设置:
 file_uploads = Off
 upload_tmp_dir = /var/php_tmp
 upload_max_filesize = 0M
 allow_url_fopen = Off
 allow_url_include = Off
 safe_mode = Off 
 display_errors = off
 magic_quotes_gpc = off
 magic_quotes_runtime =    off
 max_file_uploads=0 
 disable_functions=passthru,exec,phpinfo
 open_basedir  = /home/sites/foo.org/public_html/ 

不是完全相同的问题,但这个链接可能会有所帮助:http://stackoverflow.com/questions/1202818/php-editing-text-file-above-root - Matt
该目录的权限为711,但是该目录的所有者和组是什么?PHP正在哪个用户(以及任何适用的组)下运行? - Mike Brant
抱歉没有太多细节,但是php.ini文件导致了问题。 - TryHarder
3个回答

5
似乎PHP的安全模式open_basedir被启用,阻止您做想做的事情-因此不允许,因此不可能。
您可以检查是否允许写入公共目录之外的其他目录,通常有../tmp../temp并且可写。
您可以使用以下命令找出open_basedir允许的路径。
echo ini_get('open_basedir');

另一种解决问题的方法:将文件放在公共目录的子目录中,并使用 .htaccess 进行安全保护(用户/密码、拒绝所有 IP,只允许您自己的 IP)。
编辑:
  • 通过 htaccess 使用用户名/密码保护目录:使用 htaccess 生成器,或者
  • 仅允许来自特定 IP 的访问:创建一个名为 .htaccess 的文件,并使用以下内容:

    order deny,allow

    deny from all

    allow from 888.888.888.888


我喜欢htaccess版本,你能提供一些样例吗?谢谢。 - TryHarder
".htaccess建议非常有用,谢谢!" - Robert Sinclair

0

0
经过研究,我找到了显而易见的答案: 在php.ini中设置open_basedir = none 我认为这对某些人会有用。
感谢所有的回答,我从中学到了很多。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接