2011-11-26 33 views
0

我在编码方面存在一些问题。我已经制作了一个文件恢复PHP脚本,允许用户在文件名旁边放置一个复选框 - 然后当他们点击底部的“恢复”按钮时,它将从备份恢复相关文件。HTML表单文章 - 使用具有长名称属性的复选框

不幸的是,似乎有一个问题。文件的完整路径和名称位于复选框的“名称”属性中 - 这样,它就会作为需要恢复的位置和文件传递给下一个脚本。

举个例子:

<input type="checkbox" name="/backups/Sunday/111111111111-com/www/components/com_virtuemart/" /> 

参见 “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

好的 - 我想我已经在这里发现了我自己的问题。 PHP与suhosin模块一起安装。我禁用suhosin模块,它似乎工作正常。 现在我只需要弄清楚在模块中更改哪个设置以允许长名称。 –

+0

问题已解决。原因是PHP中的Suhosin模块。我不得不修改默认64的suhosin.post.max_name_length,也必须修改默认64的suhosin.request.max_varname_length。只修改其中的一个并不会导致问题;都必须从默认更改。 –

+0

suhosin.post.max_name_length是你想要我相信的东西。你也会想要改变这个配置变量的相应的“请求”版本 – Lee

回答

0

它的suhosin php硬化剂这是毫无疑问的。你可以编辑suhosin config目录,或者你需要采取不同的方法。

也许最简单的方法是不用重新编码脚本块来使用别名或存储一个key => value数组就可以持久地将输入名称设置为“files []”,并将路径放到文件中复选框的值。那么你可以做

foreach($_POST['files'] as $f) { 
//$f is the file path 
} 

但是我自己我不喜欢做这样的事情。我试着在某处存储一个key => value数组。如果您不想使用数据库,只需将一个php数组序列化为一个文件,那么只需为每个文件使用整数数组键即可。然后在处理脚本中,您可以简单地从已存储的数组中获取已发布整数索引处的文件