PHP文件上载匹配对
我正在将一系列成对的“before”和“after”图像上传到一个PHP脚本中。在处理上传时,我必须确保正确的“之前”和“之后”图像是匹配的 如果我只是这样做:PHP文件上载匹配对,php,file-upload,Php,File Upload,我正在将一系列成对的“before”和“after”图像上传到一个PHP脚本中。在处理上传时,我必须确保正确的“之前”和“之后”图像是匹配的 如果我只是这样做: before: <input type="file" name="image[]"> after: <input type="file" name="image[]"> before: <input type="file" name="image[]"> after: <input type
before: <input type="file" name="image[]"> after: <input type="file" name="image[]">
before: <input type="file" name="image[]"> after: <input type="file" name="image[]">
之前:之后:
之前:之后:
然后循环遍历image[]数组,我可以依靠PHP来维持正确的顺序吗
同样的问题也适用于我想如果我把它改成这样:
before: <input type="file" name="before[]"> after: <input type="file" name="after[]">
before: <input type="file" name="before[]"> after: <input type="file" name="after[]">
之前:之后:
之前:之后:
在这里,我仍然需要确保before[]数组和after[]数组是有序的,而且现在我必须在任何循环中协调这两个数组
或者我也可以这样做
before: <input type="file" name="before1"> after: <input type="file" name="after1">
before: <input type="file" name="before2"> after: <input type="file" name="after2">
etc....
之前:之后:
之前:之后:
等
(可能是我在.net中所做的),但我不太确定如何在PHP中循环使用它
那么,在构建$\u文件数组时,我可以指望PHP维护输入顺序吗?或者有更好的方法来做到这一点吗
谢谢 您可以强制php数组扩展中的数组键,例如
name="before[1]" name="after[1]"
name="before[2]" name="after[2]"
PHP将在处理表单数据时使用这些键创建数组条目
或者,您可以简单地使用以下内容
foreach(array_keys($_FILES['before']['tmp_name'])) as $key) {
processFile($_FILES['before']['tmp_name'][$key]);
processFile($_FILES['after']['tmp_name'][$key]);
}
$keys = preg_grep('/^after\d+$/', array_keys($_FILES['before']['tmp_name']));
请注意,PHP处理基于数组的文件上载的方式很愚蠢,必须循环使用['tmp\u name']
属性(或$\u FILES数组中的任何其他属性)
对于您的before1
,before2
等。。。版本,您还可以执行以下操作
foreach(array_keys($_FILES['before']['tmp_name'])) as $key) {
processFile($_FILES['before']['tmp_name'][$key]);
processFile($_FILES['after']['tmp_name'][$key]);
}
$keys = preg_grep('/^after\d+$/', array_keys($_FILES['before']['tmp_name']));
这将为您提供阵列:
$keys = array(
0 => 'after1',
1 => 'after2',
...
)
您可以强制php数组扩展中的数组键,例如
name="before[1]" name="after[1]"
name="before[2]" name="after[2]"
PHP将在处理表单数据时使用这些键创建数组条目
或者,您可以简单地使用以下内容
foreach(array_keys($_FILES['before']['tmp_name'])) as $key) {
processFile($_FILES['before']['tmp_name'][$key]);
processFile($_FILES['after']['tmp_name'][$key]);
}
$keys = preg_grep('/^after\d+$/', array_keys($_FILES['before']['tmp_name']));
请注意,PHP处理基于数组的文件上载的方式很愚蠢,必须循环使用['tmp\u name']
属性(或$\u FILES数组中的任何其他属性)
对于您的before1
,before2
等。。。版本,您还可以执行以下操作
foreach(array_keys($_FILES['before']['tmp_name'])) as $key) {
processFile($_FILES['before']['tmp_name'][$key]);
processFile($_FILES['after']['tmp_name'][$key]);
}
$keys = preg_grep('/^after\d+$/', array_keys($_FILES['before']['tmp_name']));
这将为您提供阵列:
$keys = array(
0 => 'after1',
1 => 'after2',
...
)
当您使用name字段创建一个数组时,如您在示例中所示,PHP将按照表单中提交的顺序提供一个数组。请注意,您本质上相信用户的输入。也就是说,如果有任何东西(例如恶意创建的表单或XSS注入)改变了您的表单并发布,那么您的数据顺序可能会改变。这与任何其他类型的表单操纵的风险相同。因此,PHP不应该弄乱它,但黄金法则是不信任用户输入。当您使用name字段创建一个数组时,如您在示例中所示,PHP将按照表单中提交的顺序提供一个数组。请注意,您本质上相信用户的输入。也就是说,如果有任何东西(例如恶意创建的表单或XSS注入)改变了您的表单并发布,那么您的数据顺序可能会改变。这与任何其他类型的表单操纵的风险相同。因此,PHP不应该弄脏它,但黄金法则是不信任用户输入