根据不同的变量执行2个脚本
Posted
技术标签:
【中文标题】根据不同的变量执行2个脚本【英文标题】:Executing 2 scripts based on different variables 【发布时间】:2011-08-18 12:23:06 【问题描述】:我有一个 Sql 数据库,其中有一个表,其中包含:电子邮件、公司、姓名。当我对该数据库进行查询并比较电子邮件地址时,我还会得到trim($row['company'])
和trim($row['name'])
,这样与该电子邮件地址相关联的公司和人名也会被记录下来。
我的问题是:我正在使用基于与电子邮件地址关联的 trim($row['company'])
和 trim($row['name'])
的 require_once。例如。
require_once "/var/www/vhosts/default/htdocs/" . trim($row['company']) . "/Users/" . trim($row['name']) . "/example.php";
因此,使用上面的示例,然后使用从数据库中获取的公司和名称变量,根据电子邮件将脚本指向位于目录中的 example.php 脚本。
如果我有 2 封电子邮件说每封都来自同一家公司,那么 trim($row['company']) 将保持不变,但是这两封电子邮件分配给不同的用户,所以 trim($row['name' ]) 会有所不同。有没有一种方法可以让我在使用 require_once 时同时执行两个目录中的 example.php 脚本?谢谢!
【问题讨论】:
【参考方案1】:不要使用 require_once,而只需要(或者如果您感觉更好,可以包含)。
【讨论】:
你应该证明这句话是正确的,因为它不会增加任何价值,只是说:do X【参考方案2】:这看起来不安全
如果您不进行适当的转义,这看起来不安全,因为用户可能输入任意字符并损害您的脚本。 (即在输入名称“../AnotherUser”时导致另一个脚本)
答案
但是是的,您可以通过使用glob 枚举特定目录下的所有目录来包含特定公司的所有脚本:
foreach(glob("/var/www/vhosts/default/htdocs/" . trim($row['company']) . "/Users/*", GLOB_ONLYDIR) as $userDir)
require_once($userDir."/example.php");
【讨论】:
用户不可能输入另一个用户名。这些数据在他们注册时存储在数据库中,因此一旦他们使用电子邮件、姓名和公司进行注册,他们就不可能访问另一个用户目录。 我拥有的是这个。我有一个脚本正在检查我的收件箱中是否有未读电子邮件。如果有未读的电子邮件,它将查看它来自的电子邮件地址(来自不同的人、不同的公司等),然后从该电子邮件中获取附件并将其放置在基于目录的位置在公司名称上,以及与数据库中该电子邮件地址关联的用户名。如果我有来自同一家公司的 2 个不同“用户”的 2 封未读电子邮件,我该如何执行这两个 example.php 脚本? 如果您不验证存储在数据库中的值,则存在安全问题。为什么不能为每封未读邮件执行一次脚本?【参考方案3】:为此,您需要从数据库中检索多于 1 行。所以你会得到一个数组数组作为你的结果。例如:
$result = array(
0 => array('email' => 'alex@abc.com', 'name' => 'Alex', 'company' => 'ABC'),
1 => array('email' => 'beth@xyz.com', 'name' => 'Beth', 'company' => 'XYZ')
);
一旦您像这样检索数据,您将使用以下代码为每个数据运行脚本:
foreach ($result as $row)
require('/var/www/vhosts/default/htdocs/' . trim($row['company']) . '/Users/' . trim($row['name']) . '/example.php');
至于如何从您的数据库中检索所有电子邮件的多行,这取决于您的数据库代码,所以如果没有看到您使用的内容,我真的无法提供帮助。
【讨论】:
以上是关于根据不同的变量执行2个脚本的主要内容,如果未能解决你的问题,请参考以下文章
在bash中创建一个循环脚本,其中2个变量递增,第二个变量根据第一个变量[重复]
在 gruntfile 中执行 shell 脚本并将结果分配给变量