<?php

if (!function_exists('err')) {
  function err($text) {
    die('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>'.$text.'</body></html>');
  }
}

//写文件
if (!function_exists('write_file')) {
  function write_file($file, $text) {
    global $web;
    if (empty($web['chmod']) || $web['chmod'] < 755) {
      $web['chmod'] = 755;
    }
    $split_dir = strtok($file, "/");
    $whole_dir = '';
    while ($split_dir !== false) {
      $whole_dir .= $split_dir.'/';
      $tempo_dir = rtrim($whole_dir, '/');
      //@chmod(dirname($tempo_dir), 0777);
      eval('@chmod(dirname($tempo_dir), 0'.$web['chmod'].');');
      if (!file_exists($tempo_dir)) {
        if ($tempo_dir != $file) {
          $mk = '目录';
          eval('$sk = @mkdir($tempo_dir, 0'.$web['chmod'].');');
        } else {
          $mk = '文件';
          $sk = @touch($tempo_dir);
        }
        if (!$sk) {
          err('操作失败！'.$mk.' '.$file.' 不存在或不可创建或读写，可能是权限不足。请给予目录（'.dirname($tempo_dir).'）写权限。');
          //return false;
        }
      }
      //@chmod($tempo_dir, 0777);
      eval('@chmod($tempo_dir, 0'.$web['chmod'].');');
      unset($tempo_dir);
      $split_dir = strtok("/");
    }

    if (is_writable($file)) {

      if (!$fp = @fopen($file, 'wb')) {
        if (!$fp = @fopen($file, 'rb+')) {
          err('操作失败！文件'.$file.'不能打开或创建。');
          //return false;
        }
        @ftruncate($fp, 0);
      }
      if (!f_lock($fp)) {
        err('文件'.$file.'无法写前锁定！请返回重新尝试。');
      }
if ($text != '') {
      if (!fwrite($fp, $text)) {
        if (!file_put_contents($file, $text, LOCK_EX)) {
          err('操作失败！文件'.$file.'不能写入，请确定写权限。');
        }
      }
}
      @flock($fp, LOCK_UN);
      fclose($fp);
      return true;

    } else {
      err('操作失败！文件'.$file.'不可读写，请给予目录写权限。');
      return false;
    }
    clearstatcache();


  }


  //锁定文件
  function f_lock($fp) {
    static $step_lock = 0;
    if ($step_lock >= 3) {
      return false;
    }
    if (!flock($fp, LOCK_EX)) {
      $step_lock++;
      sleep(2);
      f_lock($fp);
    }
    return true;
  }

}

?>