【问题标题】:fopen & cURL on php ubuntu web serverphp ubuntu Web 服务器上的 fopen 和 cURL
【发布时间】: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 写入 - 只有实际发生写入的位置。

标签: php ubuntu curl fopen


【解决方案1】:

一个非常常见的错误,您可能需要允许用户 www-data 访问您想要的文件。只需右键单击您想要单击属性的文件或文件夹,转到权限选项卡并将 www-data 设置为所有者。

【讨论】:

  • 谢谢老兄,但没有 GUI 的右键单击选项,只能在终端上使用。但是是的,我确实使用了命令 sudo chown -R www-data:www-data /path to www 文件夹,并且 php 脚本有效(文件创建/写入)
  • 如果这是答案,您可以单击旁边的勾号,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
  • 2011-04-22
  • 2011-08-25
  • 2012-11-26
  • 2014-10-30
  • 2018-07-24
相关资源
最近更新 更多