我有以下功能,用于检查目录是否可写。
/**
* check if the path is writable. if the path is a folder it creates a test file.
*
* @param string $path
* @return boolean
*/
public static function is_writable( $path ) {
//will work in despite of Windows ACLs bug
//NOTE: use a trailing slash for folders!!!
//see http://bugs.php.net/bug.php?id=27609
//see http://bugs.php.net/bug.php?id=30931
if ( $path{strlen($path)-1} === DIRECTORY_SEPARATOR ) {// recursively return a temporary file path
return self::is_writable( $path . uniqid( mt_rand() ) . '.tmp' );
} else if ( is_dir( $path ) ) {
return self::is_writable( $path . DIRECTORY_SEPARATOR . uniqid( mt_rand() ) . '.tmp' );
}
$file_already_exists = file_exists( $path );
// check tmp file for read/write capabilities
$f = @fopen( $path, 'a');
if ( $f === false ) {
return false;
}
if ( ! $file_already_exists ) {
unlink( $path );
}
return true;
}
这一直很好,直到最近我总是收到警告,因为unlink()
无权删除该文件。但临时文件是正常创建的,所以我可以写入目录。
警告:取消链接(C:\ Program Files(x86)\ Zend \ Apache2 \ htdocs \ wordpress \ wp-content \ plugins \ all-in-one-event-calendar-premium \ cache \ 152006398050813468bb6ec.tmp)[功能.unlink]:C:\ Program Files(x86)\ Zend \ Apache2 \ htdocs \ wordpress \ wp-content \ plugins \ all-in-one-event-calendar-premium \ lib \ utility \ class-ai1ec-中的权限被拒绝第35行的filesystem-utility.php
这怎么可能?我试图给我正在测试的目录777,我仍然收到警告!我在带有Zend服务器的Windows 7上
答案 0 :(得分:3)
尝试添加fclose()
调用,在创建文件后将文件指针保持打开状态。
如果你想做的就是确定你是否能够创建文件,也可以考虑使用touch()
。
答案 1 :(得分:0)
尝试取消关联时,您的文件不存在。看这里:
if ( ! $file_already_exists ) { //TRUE if file does not exist.
unlink( $path );
}
当file_exist为FALSE时它起作用
答案 2 :(得分:0)
C:\ Program Files(x86)是受保护的系统目录。尝试使用资源管理器拖动文件 - 您需要通过点击UAC提示来获得必要的权限。
如果要在文件系统的这一部分中编写或删除PHP脚本,则需要从管理提示符运行它(打开开始菜单,在搜索框中键入“cmd”,右键单击在cmd命令上选择“以管理员身份运行”。)
在该提示符下,调用您的PHP脚本,它将拥有写入该文件夹或删除内容的所有权限,并且通常会在您认为适合的任何位置对您的系统造成严重破坏;)
正如其他人所提到的,chmod()在Windows中毫无意义,不会做任何事情。这只是一个* nix的东西。
答案 3 :(得分:-1)
通常c:\的Windows 7需要管理员写入添加/删除任何文件。要么给apache uaser admin写/给htdocs文件夹777权限/移动apache docrot c:\