【问题标题】:PHP mkdir() doesn't create an archivePHP mkdir() 不创建存档
【发布时间】:2019-07-22 20:05:36
【问题描述】:

我正在尝试在提交表单时运行以下代码来创建一个新目录,将一个 html 文档复制到新目录,重命名 html 文档,并将包含 html 表单数据的 xml 保存到我们创建的目录。这一切都没有发生,但我没有收到任何错误。任何帮助都将不胜感激,因为到目前为止我已经花费了数小时来解决此问题,但我仍然看不到任何问题。

这是 PHP 脚本(很抱歉格式不好,它只是不会干净地粘贴):

<?php
if(isset($_POST['submit'])) {
 error_reporting(1);
 ini_set('display_errors', 'On');
 $name = $_POST["name"];
 $address = $_POST["address"];
 $photo = $_POST['photo'];
 mkdir("/kunden/homepages/9/d773272021/htdocs/articles/$name", 0755);
 chdir("/kunden/homepages/9/d773272021/htdocs/articles/$name");
 copy("/kunden/homepages/9/d773272021/htdocs/input.html", "/kunden/homepages/9/d773272021/htdocs/articles/$name");
 rename("/kunden/homepages/9/d773272021/htdocs/articles/$name/input.html", "/kunden/homepages/9/d773272021/htdocs/articles/$name/$name . '.html'");
 //XML Data In Documents
 $xmlString = "<?xml version='1.0' encoding='UTF-8'?>
    <name>$name</name>
    <address>$address</address>
    <photo>$photo</photo>
 ";
 //The above
 $dom = new DOMDocument;
 $dom->preserveWhiteSpace = TRUE;
 $dom->loadXML($xmlString);
 $dom->save("/kunden/homepages/9/d773272021/htdocs/articles/$name" . '.xml');
}
?>

这是 HTML 表单的代码(它正在运行并运行 PHP 脚本,但我想我最好将其包含在内以防万一):

 <!DOCTYPE html>
 <html>
  <head>
   <meta charset="UTF-8">
   <title>Article Creation Wizard (Beta)</title>
  </head>
  <body>
   <form method="post" action="output.php">
     Name: <input type="text" name="name"><br>
     Address: <input type="text" name="address" /><br>
     Photo: <input type="file" name="photo" /><br>
    <input type="submit">
   </form>
  </body>
</html>

提前致谢。

编辑: 有用!有点……这是我的新脚本:

<?php
if(isset($_POST)) {
 ini_set('display_errors', 1);
 ini_set('display_startup_errors', 1);
 error_reporting(E_ALL);
 $name = $_POST["name"];
 $address = $_POST["address"];
 $photo = $_POST['photo'];
 mkdir("articles/$name", 0755, true);
 copy('/homepages/9/d773272021/htdocs/input.html', "/homepages/9/d773272021/htdocs/articles/$name/");
 rename("/homepages/9/d773272021/htdocs/articles/$name/input.html", "/homepages/9/d773272021/htdocs/articles/$name/$name.html");
 //XML Data In Documents
 $xmlString = "<?xml version='1.0' encoding='UTF-8'?>
    <name>$name</name>
    <address>$address</address>
    <photo>$photo</photo>
 ";
 //The above
 $dom = new DOMDocument;
 $dom->preserveWhiteSpace = TRUE;
 $dom->loadXML($xmlString);
 $dom->save("articles/$name.xml");
}
?>

创建了目录和 XML 文件,这很棒。但是,HTML 不会被复制,因此不会被命名为新名称。

以下是我遇到的错误,感谢任何帮助:

Warning: copy(): The second argument to copy() function cannot be a directory in /homepages/9/d773272021/htdocs/output.php on line 10
Warning: rename(/homepages/9/d773272021/htdocs/articles/cancer/input.html,/homepages/9/d773272021/htdocs/articles/cancer/cancer.html): No such file or directory in /homepages/9/d773272021/htdocs/output.php on line 11
Warning: DOMDocument::loadXML(): Extra content at the end of the document in Entity, line: 3 in /homepages/9/d773272021/htdocs/output.php on line 21

【问题讨论】:

  • 使用错误报告。如果这是真实代码,则会出现致命错误。
  • @user3783243 已经做了,什么都没有。
  • 同时检查日志。 version="1.0" 导致错误
  • 与手头的问题无关;测试如果您将../../../../../ 放入name 字段会发生什么。
  • 尝试新的 DOMDocument()

标签: php forms directory mkdir


【解决方案1】:

尝试新的

new DOMDocument();

并激活

error_reporting(E_ALL);

【讨论】:

    【解决方案2】:

    首先你不会因为报告-1而得到所有错误, 将以下内容添加到顶部以获得所有正确的错误;

    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
    

    第二点是您的 xml 字符串格式不正确。 1.0 和 UTF-8 不在字符串里面使用下面的;

    $xmlString = "<?xml version='1.0' encoding='UTF-8'?>
      <name>$name</name>
      <address>$address</address>
      <photo>$photo</photo>
    ";
    

    第三,您正在检查应该通过发布请求发送的提交值,但是在您的发布请求的快速 var 转储之后,没有 $_POST["submit"] 值,这是从未设置过的,因此它不会进入您的 if,即是您不会收到错误的另一个原因。

    使用if(isset($_POST)) {,而不是if(isset($_POST['submit'])) {

    并且我认为新的 DOMDocument 是一个类,因此应该使用 () 来调用它。 这样做$dom = new DOMDocument(); 而不是$dom = new DOMDocument;

    在我给你的提示之后它应该可以工作,它不适用于我,因为我没有你要访问的文件夹。可以在下面的链接中检查我的代码错误

    【讨论】:

    • 检查stackoverflow.com/questions/1945989/… 了解您的最后一点。
    • 啊,谢谢@NigelRen,自从我积极使用php以来已经很久了。现在使用强大的 oop langs.. ?
    • 非常感谢,更新了我原来的问题,希望得到更多帮助!
    猜你喜欢
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    相关资源
    最近更新 更多