在php中打开动态文件

时间:2014-04-01 09:39:54

标签: php file dynamic exec fopen

我需要打开用户在blender中上传的文件(用于数据检索和处理)。

到目前为止创建$ cmd并使用exec()运行它;由于正在运行的文件始终是预定义的(C:\ xampp \ htdocs \ test.new \ test.stl),因此用于测试但无法打开用户上传的文件。

$cmd = '"C:\Users\DJ LX\Documents\blender.old\blender.exe" C:\xampp\htdocs\test.new\test.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:\Users\DJ LX\Documents\blender.old\blender.exe" $_FILES["file"]["type"];

$cmd = "C:\xampp\htdocs\test.new\upload" . $_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);

无论如何,我真的很困惑我如何从上传的文件中取出文件名并用它来打开文件。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可能正在寻找 $ _ FILES ['file'] ['tmp_name']

<强>更新

使用临时(几乎随机)名称上传文件。你可以用 $ _ FILES ['file'] ['tmp_name'] 来实现。源文件的文件名位于 $ _ FILES ['file'] ['name'] 中。您的命令行字符串需要可执行文件和文件名之间的空格,并且应该类似于:

$cmd = '"C:\Users\DJ LX\Documents\blender.old\blender.exe" '
           . escapeshellarg( $_FILES["file"]["tmp_name"] );

使用或不使用双引号可能是安全的 - 请自行检查。

答案 1 :(得分:0)

好的,所以我想出来了,谢谢你的建议蓝色。在使用$ _FILES [&#39;]&#39; [&#39; tmp_name&#39;]后,我能够让blender尝试打开它,但由于它无法识别,(tmp文件)它没有&# 39;工作。

然后我又回到$ _FILES [&#34; file&#34;] [&#34; type&#34;]但在$ _FILES [&]之后将exec($ cmd)进一步向下移动到脚本中#34;文件&#34;] [&#34;类型&#34;]被移动到上传文件夹。