如何在共享主机上的php中创建public_html外的文件

时间:2012-08-01 14:29:43

标签: php shared-hosting

我正在尝试在php中的public_html之外创建一个文件:

fopen("/home/sites/foo.org/backup-ticketing/asu.sql";w)

但是我收到此错误消息。我相信我应该能够以某种方式做到这一点我无法理解。该文件夹的权限为711

  

[Wed Aug 01 14:33:54 2012] [错误] [客户端84.3.2.16] PHP警告:   fopen(/home/sites/foo.org/backup-ticketing/asu.sql)[function.fopen]:无法打开流:   不允许进行操作   第4行/home/sites/foo.org/public_html/back/asu.php

你能告诉我什么是正确的做法吗?

感谢您提出的许多建议,我还有其他信息:

php.ini是public_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/ 

3 个答案:

答案 0 :(得分:3)

似乎PHP的Safe modeopen_basedir已启用,阻止您执行任何操作 - 因此根本不允许这样做,因此无法实现。

您可以检查是否允许您写入公共目录之外的其他目录,通常../tmp../temp是可写的。

您可以通过

找出open_basedir允许的路径
echo ini_get('open_basedir');

解决您的问题的另一种方法:将您的文件放在公共目录的子目录中,并使用.htaccess(用户/密码,拒绝所有IP,但您的等等)保护它。

编辑:

  • 通过htacces使用用户名/密码保护目录:使用htaccess generator
  • 仅允许从某些IP访问:创建文件并使用以下内容将其命名为.htaccess

    order deny,allow

    deny from all

    allow from 888.888.888.888

答案 1 :(得分:0)

您可以尝试使用shell_exec。

您可以使用与Web服务器用户不同的用户执行脚本

http://php.net/manual/de/function.shell-exec.php

答案 2 :(得分:0)

经过研究,我找到了明显的答案: open_basedir =无 在php.ini中 我虽然有人会觉得有用。

感谢所有答案,我从他们那里学到了很多东西。