如果文件不存在,如何检查PHP文件上载';你没有分机吗?
遵循这一思路: 我假设我需要检查我上传的文件的文件扩展名,对吗 我正在尝试使用PHP接口将make文件生成的二进制文件上载到Raspberry中 这是有问题的文件:如果文件不存在,如何检查PHP文件上载';你没有分机吗?,php,Php,遵循这一思路: 我假设我需要检查我上传的文件的文件扩展名,对吗 我正在尝试使用PHP接口将make文件生成的二进制文件上载到Raspberry中 这是有问题的文件: Big_ppd_display_try1: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sh
Big_ppd_display_try1: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=047e67dcea785cb3139bc690aebcf0d537ef40fe, with debug_info, not stripped
遵循这一思路:
我可以试试:
$allowed = array('gif','png' ,'jpg');
$filename = $_FILES['uploaded_file']['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if(!in_array($ext,$allowed) ) {
echo 'error';
}
但是我如何告诉PHP只允许没有文件扩展名的二进制文件,如Big\u ppd\u display\u try1
另外,我正在从Linux机器上传。该二进制文件在Windows PC上的外观如何?要确保该文件没有扩展名,请将其与
null
进行比较。
要检查mime
tipe,请使用finfo\uu
函数:
$filename=$\u文件['uploaded\u file']['name'];
$finfo=finfo\u open(FILEINFO\u MIME\u类型);
$mime=finfo_文件($finfo,$_文件['uploaded_file']['tmp_name']);
$ext=pathinfo($filename,pathinfo_扩展名);
if($ext===null&&$mime===='application/octet stream'){
//做点什么
}
要确保文件没有扩展名,请将其与null
进行比较。
要检查mime
tipe,请使用finfo\uu
函数:
$filename=$\u文件['uploaded\u file']['name'];
$finfo=finfo\u open(FILEINFO\u MIME\u类型);
$mime=finfo_文件($finfo,$_文件['uploaded_file']['tmp_name']);
$ext=pathinfo($filename,pathinfo_扩展名);
if($ext===null&&$mime===='application/octet stream'){
//做点什么
}
如果您像下面这样使用linux,我们可以使用file
命令
$command = "file $_FILES['uploaded_file']['tmp_name']";
shell_exec($command);
它将返回一个字符串,如
ELF 32位LSB可执行文件,ARM,EABI5版本1(SYSV),动态链接,解释器/lib/ld linux armhf.so.3,对于GNU/linux 3.2.0,BuildID[sha1]=047e67dcea785cb3139bc690aebcf0d537ef40fe,带有调试信息,未剥离
您可以使用此字符串计算返回所需文件类型的数据。如果您使用linux,我们可以使用
file
命令,如下所示
$command = "file $_FILES['uploaded_file']['tmp_name']";
shell_exec($command);
它将返回一个字符串,如
ELF 32位LSB可执行文件,ARM,EABI5版本1(SYSV),动态链接,解释器/lib/ld linux armhf.so.3,对于GNU/linux 3.2.0,BuildID[sha1]=047e67dcea785cb3139bc690aebcf0d537ef40fe,带有调试信息,未剥离
可以使用此字符串计算返回所需文件类型的数据
我假设我需要检查我上传的文件的文件扩展名,对吗
没有
文件扩展名是“建议文件名”的任意部分,完全由用户控制。您应该遵循的程序是:
- 扩展名应基于步骤1中确定的文件类型
- 名称的其余部分可能基于用户的建议,但应通过允许字符的白名单进行过滤,例如,将字母和数字以外的所有内容替换为
-
- 扩展名应基于步骤1中确定的文件类型
- 名称的其余部分可能基于用户的建议,但应通过允许字符的白名单进行过滤,例如,将字母和数字以外的所有内容替换为
-
我不知道这是否是最佳解决方案,但我最后检查了该文件是否为
应用程序/octet流
:
<?php
if (isset($_POST['update_button']) && $_POST['update_button'] == 'Update') {
if (isset($_FILES['uploaded_file']) &&
$_FILES['uploaded_file']['error'] === UPLOAD_ERR_OK &&
$_FILES['uploaded_file']['type'] == "application/octet-stream")
{
// print_r($_FILES);
echo "<br>Successful upload !<br> ";
} else {
echo "<br>File was not uploaded !<br> ";
}
}
?>
我已经放弃了对文件扩展名或MIME类型的检查,因为我认为可以轻松绕过这些检查
我现在尝试使用某个参数执行该文件,并检查其响应
这是我现在正在研究的代码:
$fileTmpPath = $_FILES['uploaded_file']['tmp_name'];
$fileName = $_FILES['uploaded_file']['name'];
// echo "<br>$fileTmpPath"."/$fileName<br>";
$command = "sudo .$fileTmpPath"."/$fileName -argument";
echo "<br>$command<br>";
$response = exec($command, $full, $status);
if($status != 0) {
echo "<br>Something went wrong<br>";
} else {
echo "<br>$response<br>";
}
$fileTmpPath=$\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
$fileName=$\u文件['uploaded\u file']['name'];
//回显“
$fileTmpPath”。/$fileName
”;
$command=“sudo.$fileTmpPath”。/$fileName-argument”;
echo“
$command
”;
$response=exec($command,$full,$status);
如果($status!=0){
echo“
出了问题
”;
}否则{
回声“
$response
”;
}
我不知道这是否是最佳解决方案,但我最后检查了该文件是否为应用程序/八位字节流
:
<?php
if (isset($_POST['update_button']) && $_POST['update_button'] == 'Update') {
if (isset($_FILES['uploaded_file']) &&
$_FILES['uploaded_file']['error'] === UPLOAD_ERR_OK &&
$_FILES['uploaded_file']['type'] == "application/octet-stream")
{
// print_r($_FILES);
echo "<br>Successful upload !<br> ";
} else {
echo "<br>File was not uploaded !<br> ";
}
}
?>
我已经放弃了对文件扩展名或MIME类型的检查,因为我认为可以轻松绕过这些检查
我现在尝试使用某个参数执行该文件,并检查其响应
这是我现在正在研究的代码:
$fileTmpPath = $_FILES['uploaded_file']['tmp_name'];
$fileName = $_FILES['uploaded_file']['name'];
// echo "<br>$fileTmpPath"."/$fileName<br>";
$command = "sudo .$fileTmpPath"."/$fileName -argument";
echo "<br>$command<br>";
$response = exec($command, $full, $status);
if($status != 0) {
echo "<br>Something went wrong<br>";
} else {
echo "<br>$response<br>";
}
$fileTmpPath=$\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
$fileName=$\u文件['uploaded\u file']['name'];
//回显“
$fileTmpPath”。/$fileName
”;
$command=“sudo.$fileTmpPath”。/$fileName-argument”;
echo“
$command
”;
$response=exec($command,$full,$status);
如果($status!=0){
echo“
出了问题
”;
}否则{
回声“
$response
”;
}
$ext==null假定任何没有扩展名的文件都可以工作。但他只想要二进制文件,我觉得这对我没什么帮助。我不想让用户上传任何类型的文件。$ext===null假设任何没有扩展名的文件都可以工作。但他只想要二进制文件,我觉得这对我没什么帮助。我不想让用户知道