Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在第一次运行后在PHP中注释代码行?_Php - Fatal编程技术网

在第一次运行后在PHP中注释代码行?

在第一次运行后在PHP中注释代码行?,php,Php,假设我们只在一个PHP文件中包含此代码: <?php migrateTables(); ... 您似乎在评论中获得了大量关于所需解决方案的帮助,因此我将谈谈一些重要的问题: 你在这里做的事情似乎很危险。如果注释掉migrateTables()函数的目的是确保它只运行一次,那么这里有两种可能性: 此功能是在只能由管理员帐户或本地文件系统访问的脚本中执行的,即不可公开访问的脚本 此功能在可公开访问的脚本中执行,例如网站主页 如果我们讨论的是案例1,那么为什么要使用这种复杂的方法进行表迁移呢?

假设我们只在一个PHP文件中包含此代码:

<?php
migrateTables();
...

您似乎在评论中获得了大量关于所需解决方案的帮助,因此我将谈谈一些重要的问题:

你在这里做的事情似乎很危险。如果注释掉
migrateTables()
函数的目的是确保它只运行一次,那么这里有两种可能性:

  • 此功能是在只能由管理员帐户或本地文件系统访问的脚本中执行的,即不可公开访问的脚本
  • 此功能在可公开访问的脚本中执行,例如网站主页
  • 如果我们讨论的是案例1,那么为什么要使用这种复杂的方法进行表迁移呢?创建一个单独的目录。每当您推出需要表迁移或其他各种更改的更新时,让主脚本分析此目录中需要运行的脚本,运行这些脚本,然后删除它们(或将它们移到其他位置)。在这种情况下,需要一个
    migrate_tables.php
    文件,该文件只运行
    migrateTables()
    函数,该函数将在迁移完成后删除。您还可以使用其他选项,只要您对所做的事情非常小心,这些选项都不会导致执行多次
    migrateTables()

    如果我们说的是#2,那就马上停止你正在做的事。如果在用户访问您的网站时调用此
    migrateTables()
    函数,那么当用户a访问您的网站时,您的脚本的一个实例很容易执行
    migrateTables()
    ,您的脚本的第二个实例执行
    migrateTables()
    当用户B在用户A的实例完成执行之前访问您的网站时,这意味着在该函数完成后对其进行注释不足以保证该函数只运行一次。对PHP的请求是无状态和异步的,这意味着这些请求可能并行执行,并导致一些非常非常严重的错误



    需要注意的是:确保你没有浪费时间来实施错误问题的解决方案,否则你可能会发现原来只有一个小问题,您现在有一个小问题和一个非常大的问题。

    为什么不使用if?@ZeljkoMiloradovic我想在服务器端不带任何条件地运行该代码一次。是的,这是可能的。请回答您的问题,并添加您尝试过但未按预期工作的内容。您可以写入文件,但必须获取该文件内容,分解为行,添加//到所需行,使用\n对其进行内爆,然后再次放入文件。设置了权限的文件获取内容和文件放置内容。为什么不干脆
    $path\u to\u file=\uuuuuuu?@b-fleming我需要类似于#1的东西。但因为发布应用程序后没有管理员,所以我将向DB添加一些信息(如Laravel中的迁移信息),然后用新结构检查它们。如果在结构中发现新的内容,迁移会自动运行,否则不会。关于这个问题,您是对的。我想避开最好的解决方案,但现在我要实施最好的解决方案。谢谢
    
    <?php
    // migrateTables();
    ...