即使脚本成功,也会生成mkdir()警告

时间:2012-01-25 02:25:26

标签: php fwrite mkdir

我正在创建一个内容管理系统,用户可以通过界面动态创建类别和部分。它是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);
            }

3 个答案:

答案 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);