我在编码方面遇到了一些问题。我已经创建了一个文件恢复PHP脚本,允许一个人在文件名旁边放置一个复选框 - 然后当他们单击底部的“恢复”按钮时,它将从备份中恢复有问题的文件。
不幸的是,似乎存在问题。文件的完整路径和名称位于复选框的“名称”属性中 - 这样它就可以作为需要恢复的位置和文件传递给下一个脚本。
举个例子:
<input type="checkbox" name="/backups/Sunday/111111111111-com/www/components/com_virtuemart/" />
查看“name”属性有多长?在许多情况下,还原有效 - 但是一旦name属性变长,它就不再起作用了。在上面的属性中,“name”字段长度为63个字符。
现在,如果尝试了另一个:
<input type="checkbox" name="/backups/Sunday/111111111111-com/www/components/com_virtuemart/js/" />
上面的“name”属性长度为67个字符。它不起作用。
在POST数据发布到的脚本上,我做了一个var_dump($ _ POST);看看输出是什么。在“name”属性长度为63个字符的第一种情况下,var_dump会显示它。但是在第二种情况下,属性长度为67个字符,它不会显示它 - 因此文件不会被恢复。
这个假设的属性大小限制有什么办法吗?我在网上看了几个帖子,其中个人说“名字”属性的长度没有限制 - 但显然有一个。
谢谢!
答案 0 :(得分:0)
它的suhosin php硬化剂无疑是这样做的。您可以编辑suhosin配置目录,也可以采用不同的方法。
也许最简单的方法是不重新编码脚本以使用别名或持久存储key =&gt;值数组,只需将输入的名称设置为“files []”并将路径作为文件放入复选框值。那么你可以做到
foreach($_POST['files'] as $f) {
//$f is the file path
}
然而,我自己不想做这样的事情。我尝试在某处存储一个key =&gt;值数组。如果您不想使用数据库,只需将php数组序列化为文件,然后只需为每个文件选中带有整数数组键的复选框。然后在处理脚本上,您只需从已发布的整数索引
中获取存储数组中的文件