我应该如何处理使用 PHP 提交一个非常大的字符串?
How should I handle submitting a very large string using PHP?
我有一个带有文本输入框的表单。这个文本区域将有一些我想做的自定义 "tags",类似于 SO 文本区域中的 * 运算符,它根据它的使用方式被处理和解释为斜体或粗体。
最终目标是处理这一长串文本,进行任何必要的格式修改,然后将其写入数据库 table。但是,我不太确定如何解决这个问题。
我的第一个想法是使用 $_POST,但我不确定在这个数组中存储非常大的字符串是否是个好主意,因为我找不到任何关于在这个数组中存储多少数据的信息大批。将大量数据传输到另一个页面是否有一些最佳实践?我应该为此使用 jQuery 吗?如果可以,怎么做?
使用 $_POST 是一个很好的开始方式,如果它越来越大然后 8MB 改变 php.ini。如果它变得更大,您可以开始切片您的字符串并通过 jQuery 将块发送到您的网络服务器,然后将它们连接起来。
但一开始 运行 我更喜欢标准方式并使用 $_POST。
$_POST
很可能会被使用,无论您是否使用 jQuery。 $_POST
的默认限制已经足够高,可以处理大多数用户输入,文件上传除外。如果您需要它大于 8MB,您可以在网络服务器上的 php.ini
文件中更改它。我有一个类似的应用程序,在测试中我可以毫无问题地将 >64MB 粘贴到我的文本区域中。
我也会考虑稍微改变一下操作顺序。我会执行以下其中一项操作:
1) 不要在数据库插入之前格式化您的文本,而是在返回浏览器的途中对其进行格式化。这样,如果您更改输入格式的方式,您就可以将其应用于原始数据。在显示数据时,服务器需要做更多的工作,但您可能会更轻松地维护您的应用程序。
2) 在数据库中存储格式化文本和原始文本。这有速度的好处,因为不必在每次调用时在发送给用户的途中对其进行格式化,并且还允许您构建一种稍后更改数据格式的方法,但需要一些编码费用。
编辑:正如 pal4life 在评论中所述,您希望避免执行任何用户输入。本质上,如果您的方法是将输入保存到一个文件,然后用 include()
或 require()
调用它,您就会面临一些严重的安全漏洞。攻击者可以上传类似 <?php var_dump($conn);
或更糟的代码。我相信您可以安全地 readfile()
,但是浏览器仍然容易受到攻击者可能放置在那里的任何潜在 javascript 的攻击。
我有一个带有文本输入框的表单。这个文本区域将有一些我想做的自定义 "tags",类似于 SO 文本区域中的 * 运算符,它根据它的使用方式被处理和解释为斜体或粗体。
最终目标是处理这一长串文本,进行任何必要的格式修改,然后将其写入数据库 table。但是,我不太确定如何解决这个问题。
我的第一个想法是使用 $_POST,但我不确定在这个数组中存储非常大的字符串是否是个好主意,因为我找不到任何关于在这个数组中存储多少数据的信息大批。将大量数据传输到另一个页面是否有一些最佳实践?我应该为此使用 jQuery 吗?如果可以,怎么做?
使用 $_POST 是一个很好的开始方式,如果它越来越大然后 8MB 改变 php.ini。如果它变得更大,您可以开始切片您的字符串并通过 jQuery 将块发送到您的网络服务器,然后将它们连接起来。
但一开始 运行 我更喜欢标准方式并使用 $_POST。
$_POST
很可能会被使用,无论您是否使用 jQuery。 $_POST
的默认限制已经足够高,可以处理大多数用户输入,文件上传除外。如果您需要它大于 8MB,您可以在网络服务器上的 php.ini
文件中更改它。我有一个类似的应用程序,在测试中我可以毫无问题地将 >64MB 粘贴到我的文本区域中。
我也会考虑稍微改变一下操作顺序。我会执行以下其中一项操作:
1) 不要在数据库插入之前格式化您的文本,而是在返回浏览器的途中对其进行格式化。这样,如果您更改输入格式的方式,您就可以将其应用于原始数据。在显示数据时,服务器需要做更多的工作,但您可能会更轻松地维护您的应用程序。
2) 在数据库中存储格式化文本和原始文本。这有速度的好处,因为不必在每次调用时在发送给用户的途中对其进行格式化,并且还允许您构建一种稍后更改数据格式的方法,但需要一些编码费用。
编辑:正如 pal4life 在评论中所述,您希望避免执行任何用户输入。本质上,如果您的方法是将输入保存到一个文件,然后用 include()
或 require()
调用它,您就会面临一些严重的安全漏洞。攻击者可以上传类似 <?php var_dump($conn);
或更糟的代码。我相信您可以安全地 readfile()
,但是浏览器仍然容易受到攻击者可能放置在那里的任何潜在 javascript 的攻击。