PHP 创建文件夹、使用#ID 创建子文件夹并上传默认文件?

PHP Create Folder, Create Subfolder using #ID and Upload a default file?

好吧,我已经考虑了一下这个问题,但我真的不想在不知道该怎么做的情况下开始...

我将在我的托管帐户上提供基本的自动托管,当用户检查网站时,使用 PayPal 支付托管包费用,IPN 会执行它的操作。我已经到位并正在工作。但是,我将如何键入一个在付款时自动执行的脚本 - 使用 table WebDesign_HostingAccounts 中的 NEXT AUTO_INCREMENT #ID 编号创建一个文件夹。因此,如果下一个要使用的 ID 是 #0005,则该文件夹将被命名为“0005”,然后在该文件夹中自动添加一个 Public_HTML 子文件夹并上传一个 Welcome.PHP 页面。

我知道它与以下脚本片段有关:

<?php
// Desired folder structure
$structure = './depth1/depth2/depth3/';

// To create the nested structure, the $recursive parameter 
// to mkdir() must be specified.

if (!mkdir($structure, 0777, true)) {
    die('Failed to create folders...');
}
// ...
?>

但我如何将其添加到 MySQL 查询中以检查下一个 ID,然后上传欢迎页面?

任何基本脚本都会有很大帮助!谢谢!

我一直在这样做,回到我以前的自由项目,我从我的经验中发现这是一种不好的做法。

让我们先跳过 public_html 和 Welcome.php 部分...

这是"scenario"部分

您想要做的是:

  1. PHP 首先(通过尝试确定下一个 AUTO_INCREMENT ID 并根据此 "next" auto_increment ID 创建文件夹)
  2. 然后在 MySQL 数据库中执行 INSERT 命令。

现在的问题是:如果您有 2 个客户端同时请求相同的请求怎么办?

Client 1 is expecting that the next auto_increment ID is 2

Client 2 is also expecting that the next auto_increment ID is 2 (not 3 because there's not yet a row from the database with 2 as its primary ID, so it should also get 2).

史诗般的部分是,如果客户端 2 首先完成其请求。我很确定客户端 1 也将很快完成它的过程,它会尝试创建一个 AUTO_INCREMENT ID-based 文件夹,但是 AUTO_INCREMENT [=90= 已经存在一个文件夹].有冗余部分。史诗,失败。

这是主赛事,"The Solution"

让我们换一种方式,

  1. 你在MySQL数据库中做INSERT command/s,我建议你使用Transaction-based过程。
  2. 然后 PHP 将创建一个文件夹,其名称基于最近插入行的结果 AUTO_INCREMENT ID。

What the hell? How do I get the AUTO_INCREMENT ID from the recently inserted row?"

Use LAST_INSERT_ID(), a built-in function in MySQL to get the AUTO_INCREMENT ID from the last inserted row, (which I guess) from the last table your inserted a certain row. Now here's the reading part regarding this LAST_INSERT_ID() thing:

Will it make a conflict if other clients also inserted a row to that table?

No, because each client has their own distinct sessions. Which means it only returns the auto-increment ID from the last inserted row of current client, not by global reference. (Hooray for MySQL engine!)

Multi-Insert查询警告

LAST_INSERT_ID() return 如果您想使用这样的 multi-insert 查询,请输入第一个插入行的 ID:

INSERT INTO mytable(name, age)
VALUES
    ("Mark Hernandez", 25),
    ("Allen Linatoc", 20)
;

它只会 return 您在 multi-insert 查询中指定的 第一 行的插入 ID。

您可以使用 php 的 mysql_insert_id 更快地完成它。 我不知道您使用的是什么数据库 abstraction/extension(PDO、MySQL、MySQLi),但这里有一个来自 PHP 的原生 mysql 扩展名:http://php.net/manual/en/function.mysql-insert-id.php

归根结底,最好参考文档以获取所需的任何说明。

无论如何,你的部分说:

and in that folder then automatically add a Public_HTML subfolder and upload a Welcome.PHP page.

  • 我想 welcome.php 文件应该是您服务的工作 ;)
  • public_html?注意 chmod 的东西,你知道文件系统权限的东西。安全永远是第一位的。 文件系统权限只是另一个主题。你需要为此提出另一个问题。

希望我能帮您解决问题。 下面就让专家们来更正吧^_^

祝你有美好的一天!