A-A+

一个用来操作apache的.htaccess文件的类

2012年05月03日 PHP技术文章 暂无评论 阅读 81 views 次

htaccess的文件是Apache服务器下面的一个配置文件,主要负责相关目录下的网页配置,比如我们可以通过htaccess的文件实现,网页301重定向、自定义错误页、改变文件扩展名、php伪静态,目录权限的访问,配置默认文档等。

下面是一个用来操作Apache的.htaccess文件的类,大家可以了解一下即可,其实在Apache服务器下面会自动生成一个htaccess配置文件,如果有需要,可以直接进行更改。

htaccess.class.php 这个是类文件。

<?   /**  
* Class for handling htaccess of Apache
* @author    Sven Wagener <sven.wagener@intertribe.de>
* @copyright Intertribe - Internetservices Germany
* @include   Funktion:_include_
*/  
  
class htaccess{   
    var $fHtaccess=""; // path and filename for htaccess file
    var $fHtgroup="";  // path and filename for htgroup file
    var $fPasswd="";   // path and filename for passwd file
       
    var $authType="Basic"; // Default authentification type
    var $authName="Internal area"; // Default authentificat
ion name   
  
    /**  
    * Initialising class htaccess  
    */  
    function htaccess(){   
    }   
  
    /**  
    * Sets the filename and path of .htaccess to work with
    * @param string $filename    the name of htaccess file
    */  
    function setFHtaccess($filename){   
        $this->fHtaccess=$filename;   
    }   
       
    /**  
    * Sets the filename and path of the htgroup file for the
 htaccess file  
    * @param string $filename    the name of htgroup file
    */  
    function setFHtgroup($filename){   
        $this->fHtgroup=$filename;   
    }   
       
    /**  
    * Sets the filename and path of the password file for the
 htaccess file  
    * @param string $filename    the name of htgroup file
    */  
    function setFPasswd($filename){   
        $this->fPasswd=$filename;   
    }   
  
    /**  
    * Adds a user to the password file  
    * @param string $username     Username  
    * @param string $password     Password for Username
    * @param string $group        Groupname for User (optional)
    * @return boolean $created         Returns true if
 user have been created otherwise false  
    */  
    function addUser($username,$password,$group){   
        // checking if user already exists   
        $file=@fopen($this->fPasswd,"r");   
        $isAlready=false;   
        while($line=@fgets($file,200)){   
            $lineArr=explode(":",$line);   
            if($username==$lineArr[0]){   
                $isAlready=true;   
             }   
        }   
           
        if($isAlready==false){   
            $file=fopen($this->fPasswd,"a");   
  
            $password=crypt($password);   
            $newLine=$username.":".$password."\n";   
  
            fputs($file,$newLine);   
            fclose($file);   
            return true;   
        }else{   
            return false;   
        }   
    }   
  
    /**  
    * Adds a group to the htgroup file  
    * @param string $groupname     Groupname  
    */  
    function addGroup($groupname){   
        $file=fopen($this->fHtgroup,"a");   
        fclose($file);   
    }   
  
    /**  
    * Deletes a user in the password file  
    * @param string $username     Username to delete
    * @return boolean $deleted    Returns true if user
have been deleted otherwise false  
    */  
    function delUser($username){   
        // Reading names from file   
        $file=fopen($path.$this->fPasswd,"r");   
        $i=0;   
        while($line=fgets($file,200)){   
            $lineArr=explode(":",$line);   
            if($username!=$lineArr[0]){   
                $newUserlist[$i][0]=$lineArr[0];   
                $newUserlist[$i][1]=$lineArr[1];   
                $i++;   
            }else{   
                $deleted=true;   
            }   
        }   
        fclose($file);   
  
        // Writing names back to file (without the user
 to delete)   
        $file=fopen($path.$this->fPasswd,"w");   
        for($i=0;$i<count($newUserlist);$i++){   
            fputs($file,$newUserlist&#91;$i&#93;&#91;0&#93;.":".$newUse
rlist&#91;$i&#93;&#91;0&#93;."\n");   
        }   
        fclose($file);   
           
        if($deleted==true){   
            return true;   
        }else{   
            return false;   
        }   
    }   
       
    /**  
    * Returns an array of all users in a password file  
    * @return array $users         All usernames of a pa
ssword file in an array  
    * @see setFPasswd()  
    */  
    function getUsers(){   
    }   
       
    /**  
    * Sets a password to the given username  
    * @param string $username     The name of the User 
for changing password  
    * @param string $password     New Password for the User
    * @return boolean $isSet      Returns true if passw
ord have been set  
    */       
    function setPasswd($username,$new_password){
        // Reading names from file   
        $newUserlist="";   
           
        $file=fopen($this->fPasswd,"r");   
        $x=0;   
        for($i=0;$line=fgets($file,200);$i++){   
            $lineArr=explode(":",$line);   
            if($username!=$lineArr[0] && $lineArr[0]!=""
&& $lineArr[1]!=""){   
                $newUserlist[$i][0]=$lineArr[0];   
                $newUserlist[$i][1]=$lineArr[1];   
                $x++;   
            }else if($lineArr[0]!="" && $lineArr[1]!=""){   
                $newUserlist[$i][0]=$lineArr[0];   
                $newUserlist[$i][1]=crypt($new_password)."\n";
                $isSet=true;   
                $x++;   
            }   
        }   
        fclose($file);   
  
        unlink($this->fPasswd);   
  
        /// Writing names back to file (with new password)
        $file=fopen($this->fPasswd,"w");   
        for($i=0;$i<count($newUserlist);$i++){   
            $content=$newUserlist&#91;$i&#93;&#91;0&#93;.":".$newUserlist&#91;$i&#93;&#91;1&#93;;
            fputs($file,$content);   
        }   
        fclose($file);   
  
        if($isSet==true){   
            return true;   
        }else{   
            return false;   
        }   
    }   
  
    /**  
    * Sets the Authentification type for Login  
    * @param string $authtype     Authentification type as string
    */  
    function setAuthType($authtype){   
        $this->authType=$authtype;   
    }   
  
    /**  
    * Sets the Authentification Name (Name of the login area)
    * @param string $authname     Name of the login area
    */  
    function setAuthName($authname){   
        $this->authName=$authname;   
    }   
  
    /**  
    * Writes the htaccess file to the given Directory and
 protects it
    * @see setFhtaccess()  
    */  
    function addLogin(){   
       $file=fopen($this->fHtaccess,"w+");   
       fputs($file,"Order allow,deny\n");   
       fputs($file,"Allow from all\n");   
       fputs($file,"AuthType        ".$this->authType."\n");
       fputs($file,"AuthUserFile    ".$this->fPasswd."\n\n");   
       fputs($file,"AuthName        \"".$this->authName."\"\n");
       fputs($file,"require valid-user\n");   
       fclose($file);   
    }   
  
    /**  
    * Deletes the protection of the given directory
    * @see setFhtaccess()  
    */  
    function delLogin(){   
        unlink($this->fHtaccess);   
    }   
}   
?> 

examples.php 这个是调用的实例。

<?   
// Here are some examples for the htaccess class   
// (Groups are not implemented yet! Only Passwd and htaccess)   
  
include("htaccess.class.php");   
  
// Initializing class htaccess as $ht   
$ht = new htaccess();   
  
// Setting up path of password file   
$ht->setFPasswd("/var/www/htpasswd");   
  
// Setting up path of password file   
$ht->setFHtaccess("/var/www/.htaccess");   
  
// Adding user   
$ht->addUser("username","0815");   
  
// Changing password for User   
$ht->setPasswd("username","newPassword");   
  
// Deleting user   
$ht->delUser("username");   
  
// Setting authenification type   
// If you don't set, the default type will be "Basic"   
$ht->setAuthType("Basic");   
  
// Setting authenification area name   
// If you don't set, the default name will be "Internal Area"   
$ht->setAuthName("My private Area");   
  
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   
// finally you have to process addLogin()   
// to write out the .htaccess file   
$ht->addLogin();   
  
// To delete a Login use the delLogin function   
$ht->delLogin();   
?>
标签:

给我留言