fopen创建文件,为什么fwrite失败?

时间:2016-10-04 15:18:11

标签: php fwrite

我在我的电脑上运行的虚拟服务器(Oracle Virtual Box)实例内的Ubuntu系统上运行这个愚蠢的小测试PHP脚本:

<header id="myCarousel" class="carousel slide">
  <!-- Indicators -->
  <ol class="carousel-indicators">
    <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
    <li data-target="#myCarousel" data-slide-to="1"></li>
    <li data-target="#myCarousel" data-slide-to="2"></li>
  </ol>

  <!-- Wrapper for slides -->
  <div class="carousel-inner">
    <div class="item active">
      <%= image_tag('user/go.png', class: 'fill img-responsive') %>
      <div class="carousel-caption">
        <h2>Caption 1</h2>
      </div>
    </div>

    <div class="item">
      <%= image_tag('user/family.jpg', class: 'fill img-responsive') %>
      <div class="carousel-caption">
        <h2>Caption 2</h2>
      </div>
    </div>
    <div class="item">
      <%= image_tag('user/family.jpg', class: 'fill img-responsive') %>
      <div class="carousel-caption">
        <h2>Caption 3</h2>
      </div>
    </div>
  </div>

  <!-- Controls -->
  <a class="left carousel-control" href="#myCarousel" data-slide="prev">
    <span class="icon-prev"></span>
  </a>
  <a class="right carousel-control" href="#myCarousel" data-slide="next">
    <span class="icon-next"></span>
  </a>
</header>

尽管设置了所有适当的目录和文件权限,但它在fwrite上失败了。 fopen工作并创建文件,因此显式启用了写访问,但是fwrite死了,输出'fwrite failed'消息(没有显示其他错误输出)。

当我上传到我的真实服务器时,同样的脚本运行得非常好,所以我完全不知道为什么它不会写入文件;也许这是我的虚拟服务器导致问题的原因。

看起来像是一件可悲的事,但它让我疯了!相当长的时间谷歌搜索未能给出答案,所以请问这里的任何人提供一些见解吗?非常感谢。

2 个答案:

答案 0 :(得分:2)

不确定为什么fwrite()调用会死掉,因为它会返回写入的字节数。

那就是说,你试过file_put_contents()吗?它是一种更简单的文件写入方式,是PHP 5早期推荐的方式 有了它,您只需要执行以下操作

$filename = "andy.txt";
if(!file_put_contents ($contents, $filename)) {
    // Write failed!
}

无需打开和关闭文件指针,因为该功能会自动处理。 :)

答案 1 :(得分:1)

解决!这是我的虚拟服务器上的磁盘空间错误。在我的脑海里,我知道我已经在其他地方看到过这个问题,因为写入失败了,但在这种情况下我没有建立连接。

@ChristianF谢谢!切换到file_put_contents()非常有用,因为它也失败了,但给了我一个有意义的错误消息:

'file_put_contents(): Only 0 of 6 bytes written, possibly out of free disk space'

啊哈!回忆起日益增长的日志文件可能是一个问题,我自己删除了/ var / log(保存后)和Presto中的所有内容!它现在有效!所以,谢谢你的提示 - 从现在开始我将切换到使用file_put_contents。 BTW:error.log本身的内容为2GB,而/ var / log中其他所有内容的大小只有15MB左右,但删除error.log本身不起作用,所以我删除了所有内容。

@Clayton Smith谢谢你,但删除&#34;或死掉(&#39; fwrite失败&#39;)&#34;部分没有导致任何进一步的错误信息 - 这是令人沮丧的:令人遗憾的是,脚本开头的那些错误报告指令似乎没有做太多。

@NaeiKinDus谢谢,但我不认为我有SELinux跑步(我担心我对此一无所知)。虽然我有一个/ etc / selinux目录,但它里面没有配置文件,只是看起来像是一个骨架semanage.conf - 不管是什么。诸如sestatus之类的命令无法识别。