【发布时间】:2015-01-24 13:09:01
【问题描述】:
无论我是尝试创建文件,还是在外部 url 上使用 file_get_contents,我似乎都无法让 fopen(或 curl)代码工作。我检查了 phpinfo 和 allow_url_fopen,allow_url_include 和 curl 都设置为 on,甚至查看了 php5/apache2/php.ini,它们都设置为 on。 但无论我做什么,都没有 php 代码有效。以下是一些示例(在 wamp/localhost 上有效,但在移动到实时 Web 服务器时无效)
在文件夹中创建一个 html 文件(适用于 windows localhost/wamp 服务器)
if (!file_exists('media/folder')) {
mkdir('media/folder', 0755, true);
}
$config_file = 'media/folder/config.html';
$config_file_handle = fopen($config_file, 'w') or die('Cannot open file: '.$config_file); //implicitly creates file
$config_file = 'media/folder/config.html';
$config_file_handle = fopen($config_file, 'w') or die('Cannot open file: '.$config_file);
$config_data = 'add to my file content'.PHP_EOL.'
';
fwrite($config_file_handle, $config_data);
不适用于实时服务器。非常令人沮丧,因为这需要工作并且尝试了许多 curl 选项但也失败了。
下面是另一个 php 代码 sn-p 可以在本地工作但不能在现场工作。
<?php
//works locally if external url used
//works locally if local file used
//Does not work live server if external url used
//Does work live server if local server url used
$string = file_get_contents('my url');
$json_a = json_decode($string, true);
foreach ($json_a as $person_name) {
//Person Name
echo $person_name['PersonName'];
}
?>
如果我不能让它发挥作用,我就无法真正实现目标。
任何帮助表示赞赏
【问题讨论】:
-
而
mkdir()只有在Web 服务器已经 对您尝试创建的那个的父目录具有写入权限时才会成功。这意味着您的 Web 服务器必须对运行此代码的当前目录具有写权限 - 这有点危险。如果mkdir()失败了,你会立即看到警告。 -
我收到警告:fopen(config.html):无法打开流:第 7 行 /var/www/my url/public_html/write.php 中的权限被拒绝 无法打开文件:config.html尝试将文件写入根文件夹时
-
这表明 Web 服务器用户没有对 config.html 文件的写入权限。
-
media/folder在这种情况下是否已经存在?我会假设它确实如此,否则mkdir()也会出错。 Apache Web 服务器用户通常命名为httpd, apache或www-data(假设您使用的是 apache)(附录 - 你说这是 Ubuntu,所以www-data将是用户名) -
如果 www-data 只有
media/folder目录是可写的,这不是一个太严重的问题。您也可以考虑仅将其组设置为www-data并使其组可写而不是 www-data 拥有。您可能不应该有 this 目录,其中代码执行可被 www-data 写入 - 只有实际发生写入的位置。