我需要在blender中打开用户上传的文件(用于数据检索和处理)。
到目前为止,创建$cmd并使用exec()运行它已经用于测试,但对于打开用户上传的文件毫无用处,因为正在运行的文件始终是预定义的(C:\xampp\htdocs\test.new\test.stl)。
$cmd = '"C:UsersDJ LXDocumentsblender.oldblender.exe" C:xampphtdocstest.newtest.stl"';
if ((($_FILES["file"]["type"] == "application/netfabb")
|| ($_FILES["file"]["type"] == "application/sla")
|| ($_FILES["file"]["type"] == "fileapplication/sla")
|| ($_FILES["file"]["type"] == "fileapplication/vnd.ms-pki.stl")))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Upload: " . $file . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
exec($cmd);
我尝试只使用 $_FILES 信息,但这不起作用。
$cmd = "C:UsersDJ LXDocumentsblender.oldblender.exe" $_FILES["file"]["type"];
和
$cmd = "C:xampphtdocstest.newupload" . $_FILES["file"]["type"];
我也尝试使用 fopen 赋值为 $openfile,然后使用 exec($openfile),但出现一个错误,指出 exec() 中的第一个参数需要是一个字符串。
$openfile = fopen($_FILES["file"]["type"], "r");
if ((($_FILES["file"]["type"] == "application/netfabb")
|| ($_FILES["file"]["type"] == "application/sla")
|| ($_FILES["file"]["type"] == "fileapplication/sla")
|| ($_FILES["file"]["type"] == "fileapplication/vnd.ms-pki.stl")))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Upload: " . $file . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
exec($opefile);
无论如何,我真的很困惑如何从上传的文件中获取文件名并使用它来打开文件。任何帮助将不胜感激。
好的,我想通了,谢谢你的蓝色建议。在玩了 $_FILES['file']['tmp_name'] 后,我能够让搅拌机尝试打开它,但由于它无法识别,(tmp 文件)它不起作用。
然后我恢复到 $_FILES["文件"]["类型"],但在将 $_FILES["文件"]["类型"] 移动到上传文件夹后,在脚本中进一步向下移动了 exec($cmd)。
您可能正在寻找 $_FILES['file']['tmp_name']。
更新
使用临时(几乎随机)名称上传文件。你可以用 $_FILES['file']['tmp_name'] 得到它。源文件的文件名为 $_FILES['file']['name']。命令行字符串在可执行文件和文件名之间需要一个空格,可能看起来像这样:
$cmd = '"C:UsersDJ LXDocumentsblender.oldblender.exe" '
. escapeshellarg( $_FILES["file"]["tmp_name"] );
无论是否使用双引号,它都是安全的 - 自己检查一下。