file_put_contents(filepath / file)[function.file-put-contents]:无法打开流:权限被拒绝

时间:2013-05-08 23:02:35

标签: php linux file-io

我已经在这里探索并从相关论坛中获取了一些提示,但我仍然无法解决我的问题,所以我发帖帮助我。谢谢大家。

我已经共享了linux托管,最近他们提供了升级,我接受了。不幸的是,他们声称我的php应用程序应该很好地调整到PHP版本5.3。我的这个应用程序在早期的服务器上工作得很好,这是php 5.2版本。当我尝试注册登录或注销历史记录或任何此类文件写入时,问题是文件权限被拒绝错误。我突出显示了以下代码,因为它是第一个遇到样本的错误。这是我的示例代码。

我特意使用file_put_contents和file_read_contents。以下是我的示例代码。

// define('DATA_PATH_MEMB', dirname( __FILE__) ."/../docs/vendor/"."data/_memdata/");
// above constant is an include file 
function updateLogins() {
  $user = $_SESSION['thisuserName'];
  $filejsonread = DATA_PATH_MEMB.$user.".dat";
  $filejsonwrite = DATA_PATH_MEMB.$user.".dat";  
  $updateDataArr = json_decode(file_get_contents($filejsonread),true);
    $timenow =  array( "datetimestamp" => date("d-m-Y h:i") );
    array_push($updateDataArr["useracess"][0]["history"]["logins"], $timenow);
    array_push($updateDataArr["useracess"][0]["history"]["logouts"], $timenow);
    file_put_contents($filejsonwrite, json_encode($updateDataArr), LOCK_EX);    
 } 

我得到以下错误,指出file_put_contents为

  

file_put_contents(/ home / mydomain / public_html / includes /../ docs / gbo / data / _memdata / someusr.dat)[function.file-put-contents]:无法打开流:权限被拒绝

我问他们我的用户帐户是否属于使用写入权限分配文件的组。我的目录是755,我的文件是644,在早期的服务器中,我的应用程序工作的所有诚意。如果不能写入任何文件,我不知道该怎么做。

我试过这个

echo exec('whomai'); // it displays nobody 

我是程序员而非管理员。我该怎么问他们或纠正自己。

2 个答案:

答案 0 :(得分:0)

文件有,

-rw-r--r-- (644) — Only the owner has read and write permissions; the group and others can read only.

此权限状态表示文件的所有者具有写入权限,但不具有其他任何人。尝试写入此文件的PHP文件作为与用户名不同的用户运行。

因此错误,Apache无法在此文件上写入。但是,如果您ssh到您的服务器并vi -file。您将能够毫无问题地编写该文件。

解决方案:

授予Apache对此文件的写入权限。 chown此文件并授予Apache所有权。

答案 1 :(得分:0)

如果您将强制设置为有效,则可能会出现问题。

尝试(在您的Linux shell上): [root @ * ] #setenforce 0

为我解决了。