Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.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_Csv_Session Variables - Fatal编程技术网

Php 美元会话的最大大小是多少?

Php 美元会话的最大大小是多少?,php,csv,session-variables,Php,Csv,Session Variables,我正在导入一个包含5000多条记录的csv文件。我目前正在做的是,将所有文件内容作为一个数组获取,并将它们逐个保存到数据库中。但是在脚本失败的情况下,整个过程将再次运行,如果我开始逐个检查表单数据库,它将使用大量查询,因此我想暂时将导入的值保留在会话中 在会议中保留那么多记录是一种好的做法吗。还是有其他方法可以做到这一点 多谢各位 如果您使用的是Postgresql,则可以使用pg_copy_from.或使用pg_put_line(从stdin复制)使用单个查询将它们全部插入,我发现这在导入大量

我正在导入一个包含5000多条记录的csv文件。我目前正在做的是,将所有文件内容作为一个数组获取,并将它们逐个保存到数据库中。但是在脚本失败的情况下,整个过程将再次运行,如果我开始逐个检查表单数据库,它将使用大量查询,因此我想暂时将导入的值保留在会话中

在会议中保留那么多记录是一种好的做法吗。还是有其他方法可以做到这一点


多谢各位

如果您使用的是Postgresql,则可以使用pg_copy_from.或使用pg_put_line(从stdin复制)使用单个查询将它们全部插入,我发现这在导入大量数据时非常有用

如果你使用MySql,你将不得不进行多次插入。请记住使用事务,这样,如果使用事务,如果查询失败,它将被取消,您可以重新开始。请注意,5000行并没有那么大!但是,您应该知道最大执行时间限制,这将在数秒后终止脚本


就会话而言,我相信您受到脚本可以使用的最大内存量(php.ini中的内存限制)的限制。会话数据保存在文件中,因此,如果许多客户机连接,您也应该考虑磁盘空间的使用。

这不是一个好主意IMPHO,因为会话数据将被序列化/非序列化,即使每个页面请求与您正在执行的操作无关。 我建议使用以下解决方案:

  • 将CSV文件放在某个地方
  • 开始交易
  • 运行插件
  • 完成所有插入后提交
  • 交易结束
  • 链接:


    如果某个操作失败,插入操作将被回滚,这样您就可以安全地重做插入操作,而不必担心重复数据。

    如果您必须分阶段执行此任务(这里有一些建议可以改进您在一次操作中执行操作的方式),请不要在$\u会话中保留csv文件。。。这是毫无意义的开销,因为磁盘上已经有了csv文件,而且在写入会话数据时,这只会给进程增加大量序列化/非序列化开销

    您一次只处理一条CSV记录,因此请记下在$\u会话中成功处理的CSV记录数。如果脚本超时或出现错误,请重新启动并读取已处理的数量,以便知道要重新启动的文件位置

    美元会话的最大大小是多少

    会话在运行时加载到内存中,因此它受到php.ini中内存限制的限制

    在会议中保留那么多记录是一种好的做法吗

    否-出于您描述的原因-它也将对性能产生重大影响

    还是有其他方法可以做到这一点

    这取决于你想要达到的目标。大多数数据库可以直接导入CSV文件,也可以使用比PHP代码更快、更有效的工具


    C.

    回答实际问题(有人刚问了一个重复的问题,但为了这个问题删除了它)

    默认会话数据处理程序将其数据存储在临时文件中。理论上,这些文件可以是文件系统允许的最大大小

    然而,正如@symcbean所指出的,当会话初始化时,会话数据会自动加载到脚本的内存中。这严重限制了会话数据中应存储的最大大小。此外,加载大量数据会对性能产生巨大影响


    如果您需要存储大量连接到会话的数据,我建议您使用按当前会话ID命名的临时文件。然后您可以根据需要处理这些文件,并尽可能在脚本的
    内存限制范围内处理这些文件。这取决于操作系统文件的大小,无论会话大小如何,每页默认值为128 MB。

    请参阅@haim evgi:不适用,因为您的链接与ASP.NET会话相关,这个问题是关于PHP会话的。很抱歉,我感到困惑,因为我看到了ismael的答案,它谈到了PHP关于加载数据填充()的内容。我无法控制查询,因为我使用的是Elgg框架。但这确实是解决此类问题的好办法。谢谢