我正在创建一个内容管理系统,用户可以通过界面动态创建类别和部分。它是PHP和MySQL驱动的 - 当用户单击表单以将用户信息提交给数据库时,它会动态创建目录(如果它尚不存在)和索引文件(如果它尚不存在)。此外,用户可以指定与同时创建的正在创建的部分对应的特定文件。
我得到的是我需要的一切:目录,索引文件和部分文件,但我也得到了mkdir()警告错误。警告说“警告:mkdir()[function.mkdir]:文件存在于..”并给出了mkdir函数出现的行。我正在使用file_exists()函数来确保目录和索引文件不存在,但是,它似乎不起作用。有什么想法吗?
我的代码是:
$dir = $category."/";
if (file_exists($_SERVER['DOCUMENT_ROOT'].$dir)) {
chdir($dir);
$newFileName = $link_name.".php";
$newFileHandle = fopen($newFileName, 'w+') or die("can't open file");
$category = $_POST['category'];
$category = strtoupper($category);
fwrite($newFileHandle, implode("\r\n", $content));
fwrite($newFileHandle, '"'.$category.'"'.';');
fwrite($newFileHandle, implode("\r\n", $php_cat_content));
fwrite($newFileHandle, '"'.$section_name.'"'.';');
fwrite($newFileHandle, implode("\r\n", $php_sec_content));
fclose($newFileHandle);
}
else {
$dir = str_replace (" ", "", $category) ."/";
mkdir($dir, 0777);
chdir($dir);
if (!file_exists("index.php")) {
$index_fn = "index.php";
$index_fh = fopen($index_fn, 'w+') or die("can't open file");
$category = $_POST['category'];
$category = strtoupper($category);
fwrite($index_fh, implode("\r\n", $content));
fwrite($index_fh, '"'.$category.'"'.';');
fwrite($index_fh, implode("\r\n", $php_cat_content));
fwrite($index_fh, '"'.$section_name.'"'.';');
fwrite($index_fh, implode("\r\n", $php_sec_content));
fclose($index_fh);
}
else {
$newFileName = $link_name.".php";
$newFileHandle = fopen($newFileName, 'w+') or die("can't open file");
$category = $_POST['category'];
$category = strtoupper($category);
fwrite($newFileHandle, implode("\r\n", $content));
fwrite($newFileHandle, '"'.$category.'"'.';');
fwrite($newFileHandle, implode("\r\n", $php_cat_content));
fwrite($newFileHandle, '"'.$section_name.'"'.';');
fwrite($newFileHandle, implode("\r\n", $php_sec_content));
fclose($newFileHandle);
}
答案 0 :(得分:0)
警告不会停止脚本执行。它告诉你,你正在尝试创建一个已经存在的目录。在尝试创建目录之前,您需要使用is_dir()
来检查目录是否存在,然后警告就会消失。
您确定$_SERVER['DOCUMENT_ROOT'].$dir
是否准确?在下面,您使用$dir
创建目录只是,前面没有任何内容,但是您正在检查目录是否存在,前面有文档根目录。
其余代码可以正常工作,因为目录存在,不需要创建。
答案 1 :(得分:0)
$_SERVER['DOCUMENT_ROOT'].$category."/"
和str_replace (" ", "", $category) ."/"
,你确定它们是一样的吗?
答案 2 :(得分:0)
$_SERVER['DOCUMENT_ROOT']
后需要斜杠。
if ( file_exists( $_SERVER['DOCUMENT_ROOT'] . "/" . $dir ) ) {
应该解决任何问题。
我也注意到这可能一共错过了$_SERVER['DOCUEMENT_ROOT'] . "/"
$dir = str_replace (" ", "", $category) ."/";
mkdir($dir, 0777);
应该(我认为)
$dir = $_SERVER['DOCUMENT_ROOT'] . "/" . str_replace (" ", "", $category) ."/";
mkdir($dir, 0777);