Require_once跨越不同的文件,全局范围

时间:2015-07-09 11:00:56

标签: php mysql variables scope require-once

我已经学习了几天PHP,我遇到了一个奇怪的问题。我有两个文件:

security.php存储数据库访问数据(用户,pw,主机,数据库)
index.php具有操作字符串/查询以防止sql / xss注入的函数,并且还存储用于密码哈希的salt前缀和后缀。

然后我有register.phpsignin.phprequire_once '../login.php';。我的问题是:当我将register.php放入signin.php时,我通常可以调用变量或函数,例如 $ var 。另一方面,global $var中完全相同的模式不起作用,PHP告诉我们没有声明变量。我试着这样做:object hpdb { def main(args: Array[String]) { val env = ExecutionEnvironment.getExecutionEnvironment val maxIterations = 10000 val DAMPENING_FACTOR: Double = 0.85 val EPSILON: Double = 0.0001 val outpath = "/home/vinoth/bigdata/assign10/pagerank.csv" val links = env.readCsvFile[Tuple2[Long,Long]]("/home/vinoth/bigdata/assign10/ppi.csv", fieldDelimiter = "\t", includedFields = Array(1,4)).as('sourceId,'targetId).toDataSet[Link]//source and target val pages = env.readCsvFile[Tuple1[Long]]("/home/vinoth/bigdata/assign10/ppi.csv", fieldDelimiter = "\t", includedFields = Array(1)).as('pageId).toDataSet[Id]//Pageid val noOfPages = pages.count() val pagesWithRanks = pages.map(p => Page(p.pageId, 1.0 / noOfPages)) val adjacencyLists = links // initialize lists ._1 is the source id and ._2 is the traget id .map(e => AdjacencyList(e.sourceId, Array(e.targetId))) // concatenate lists .groupBy("sourceId").reduce { (l1, l2) => AdjacencyList(l1.sourceId, l1.targetIds ++ l2.targetIds) } // start iteration val finalRanks = pagesWithRanks.iterateWithTermination(maxIterations) { // **//the output shows error here** currentRanks => val newRanks = currentRanks // distribute ranks to target pages .join(adjacencyLists).where("pageId").equalTo("sourceId") { (page, adjacent, out: Collector[Page]) => for (targetId <- adjacent.targetIds) { out.collect(Page(targetId, page.rank / adjacent.targetIds.length)) } } // collect ranks and sum them up .groupBy("pageId").aggregate(SUM, "rank") // apply dampening factor //**//the output shows error here** .map { p => Page(p.pageId, (p.rank * DAMPENING_FACTOR) + ((1 - DAMPENING_FACTOR) / pages.count())) } // terminate if no rank update was significant val termination = currentRanks.join(newRanks).where("pageId").equalTo("pageId") { (current, next, out: Collector[Int]) => // check for significant update if (math.abs(current.rank - next.rank) > EPSILON) out.collect(1) } (newRanks, termination) } val result = finalRanks // emit result result.writeAsCsv(outpath, "\n", " ") env.execute() } } ,它有效,但我觉得它完全没有安全感。

1)解决这个问题的正确方法是什么? 2)它是否与应用程序架构相关联? 3)使用db连接的所有函数(等等)是否应该写在一个文件中?

2 个答案:

答案 0 :(得分:0)

步骤1 - 创建一个php文件,将所有数据库连接写入其中(example-db.php)
第2步 - 在任何有数据库相关操作的地方都包含此php(db.php)。

require 'db.php';  //add your database php file here..


这很容易组织,并且可以在将应用从一台服务器迁移到另一台服务器时将错误降至最低 在PHP中有需要和包括。要求是好的,因为如果文件不可用,它将停止执行代码。

这也很容易整理,并最大限度地减少从一台服务器迁移到另一台服务器时所造成的错误

答案 1 :(得分:0)

  1. 安装composer
  2. 将所有代码放入具有namespace的类中的函数中(如果必须,则作为静态函数)。
  3. 保存lib目录中psr4中指定的类。
  4. 按照作曲家网站上的指定创建composer.json文件,并将您的lib目录包含为autoload,就像在composer docs中所说的那样。
  5. 您的文件中
  6. require_once projectroot /vendor/autoload.php。
  7. 调用您的类方法(使用命名空间)而不是函数。偷懒。避免要求/包括地狱。