IF声明不以自引用形式工作

时间:2013-05-24 15:19:35

标签: php

我正在尝试在PHP中使用if语句创建一个目录来上传文件。我正在使用一个引用自己的表单,以便我可以创建另一个文件夹并将另一组文件上载到具有不同名称的不同文件夹,或者如果我选择的话,将另一组文件上载到同一文件夹,一旦第一个具有完成。问题是我正在使用的if语句似乎不起作用。当我提交表单时,它会再次创建文件夹,无论文件夹是否已存在。

我的if声明发生了什么?

<?php
    $dirname = $_REQUEST['dirname'];
    $taken = $_REQUEST['taken'];
    $location = $_REQUEST['location'];
    $subject = $_REQUEST['subject'];
    $urldirectory = $_REQUEST['urldirectory'];

    function makeDirectory($dirname) {
        mkdir(trim($dirname, 0777));
        mkdir(trim($dirname.'/thumbs', 0777));
    } 

    if (file_exists($dirname)) {
        echo "the directory exists and it is called: " . trim($dirname);        
    } else {
        makeDirectory($dirname);
    }

    //........... code omitted from here for brevity............

?>

<form enctype="multipart/form-data" method="post" action="upload2.php">
<input type="submit" name="submit" value="Upload" />

1 个答案:

答案 0 :(得分:0)

处理目录创建和检查的方式存在一些问题:

  • 您检查$dirname是否存在,如果不存在,则创建trim($dirname, 0777)
  • trim期望一个字符串作为第二个参数,但是你传递一个整数(即0777)。我的猜测是,您希望将0777传递给mkdir,而不是传递给trim

我不知道第二点,但第一点肯定会导致file_exists($dirname)在两个连续的表单提交时失败并且具有相同的表单值。我建议尽早清理请求值,即使用

$dirname = trim($_REQUEST['dirname']);

并从那里使用$dirname,无需进一步修剪