Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果语句不以自引用形式工作_Php - Fatal编程技术网

Php 如果语句不以自引用形式工作

Php 如果语句不以自引用形式工作,php,Php,我试图在PHP中使用if语句来创建一个目录,以便将文件上载到其中。我正在使用一个引用自身的表单,这样我就可以创建另一个文件夹并将另一组文件上载到另一个名称不同的文件夹,或者在第一个文件夹完成后,将另一组文件上载到同一个文件夹(如果我选择的话)。问题是我使用的if语句似乎不起作用。当我提交表单时,无论该文件夹是否已经存在,它都会再次创建该文件夹 我的if语句是怎么回事 <?php $dirname = $_REQUEST['dirname']; $taken = $_REQU

我试图在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" />

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

  • 检查
    $dirname
    是否存在,如果不存在,则创建
    trim($dirname,0777)
  • trim
    需要一个字符串作为第二个参数,但需要传递一个整数(即
    0777
    )。我的猜测是,您希望将
    0777
    传递到
    mkdir
    ,而不是传递到
    trim
我不知道第二点,但第一点肯定会导致
file\u exists($dirname)
在两个具有相同表单值的连续表单提交中失败。我建议尽早清理请求值,即使用

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

然后从那里开始使用
$dirname
,而无需进一步修剪

检查此项。您不可能在同一父目录中创建具有相同名称的两个dir。目录名的输入字段在哪里?我认为您正在检查和创建该目录,而不管它是否实际是一个目录这里的问题可能是POST请求(这意味着表单已提交)或只是向用户显示表单的GET请求。Oswald,目录名的输入字段位于引用此表单的另一个表单中。这个字段中还有一个输入字段,但我省略了它的长度。另外,最好显式使用
$\u POST['dirname']
$\u GET['dirname']
(尽管我建议不要使用GET请求,因为它会更改服务器上的某些内容)。谢谢,这就是问题所在。在尝试解决另一个问题时,我会在$makedir的每个实例上添加trim()。