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"部分
您想要做的是:
- PHP 首先(通过尝试确定下一个 AUTO_INCREMENT ID 并根据此 "next" auto_increment ID 创建文件夹)
- 然后在 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"
让我们换一种方式,
- 你在MySQL数据库中做INSERT command/s,我建议你使用Transaction-based过程。
- 然后 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:
- http://www.mysqltutorial.org/mysql-last_insert_id.aspx
- http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id
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 的东西,你知道文件系统权限的东西。安全永远是第一位的。
文件系统权限只是另一个主题。你需要为此提出另一个问题。
希望我能帮您解决问题。
下面就让专家们来更正吧^_^
祝你有美好的一天!
好吧,我已经考虑了一下这个问题,但我真的不想在不知道该怎么做的情况下开始...
我将在我的托管帐户上提供基本的自动托管,当用户检查网站时,使用 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"部分
您想要做的是:
- PHP 首先(通过尝试确定下一个 AUTO_INCREMENT ID 并根据此 "next" auto_increment ID 创建文件夹)
- 然后在 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"
让我们换一种方式,
- 你在MySQL数据库中做INSERT command/s,我建议你使用Transaction-based过程。
- 然后 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:
- http://www.mysqltutorial.org/mysql-last_insert_id.aspx
- http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id
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 的东西,你知道文件系统权限的东西。安全永远是第一位的。 文件系统权限只是另一个主题。你需要为此提出另一个问题。
希望我能帮您解决问题。 下面就让专家们来更正吧^_^
祝你有美好的一天!