Facebook - 无法使用<input type =“file”/>标记上传文件

时间:2009-08-06 11:53:28

标签: php facebook

我试图让用户使用以下php

从我的脸书应用程序上传图像
<?php
echo render_header('Your');

define("MAX_SIZE", "1536");

function getExtension($str){
  $i = strpos($str,".");
  if(!$i) {return "";}
  $l = strlen($str) - $i;
  $ext = substr($str, $i+1, $l);
  return $ext;
}

$errors = 0;

if(isset($_POST['Upload'])){
  $image = $_FILES["file1"]["name"];
  if($image){
    $filename = stripslashes($_FILES["file1"]["name"]);
    $extension = getExtension($filename);
    $extension = strtolower($extension);
    if((strcasecmp($extension,"jpg") != 0) && (strcasecmp($extension,"jpeg") != 0) && (strcasecmp($extension,"png") != 0) && (strcasecmp($extension,"gif") != 0))
    {
      $errors = 1; 
    }
    else{
      $size = filesize($_FILES['file1']['tmp_name']);
      if($size > MAX_SIZE*1024){
        $errors = 2;
      }
      else{
        $image_name = md5(uniqid()) . '.' . $extension;
        $newname = "../images/" . $image_name;
        $flName = "/images/" . $image_name;
        $copied = move_uploaded_file($_FILES['file1']['tmp_name'], $newname);
        if(!$copied){
          $errors = 3;
        }
      }
    }
  }
}

if(isset($_POST['Upload']) && $errors == 0){
  //add to database here
  ...
  if($errors == 0){
    include "uploadedFile.php";
  }
}
else{

$user_details = $fb->api_client->users_getInfo($user, 'first_name,last_name,pic_square');
$image_url = $user_details[0]['pic_square'];
if($image_url == ""){
  $image_url = "http://static.ak.fbcdn.net/pics/q_silhouette.gif";
}
$user_name = $user_details[0]['first_name'] . " " . $user_details[0]['last_name'];
if(isset($_POST['Upload']) && $errors == 0){
?>
<div id="error" class="error">
<h2 id="standard_error" name="standard_error">Failed to upload tattoo.</h2>
<p id="standard_explanation" name="standard_explanation">
Error uploading file. This error occurred because either the photo was a size we don't support or there was a problem with the image file.
<br/>
</p>
</div>
<?php 
}
?>
<div id="newalbum" align="center">
<form id="upload" enctype="multipart/form-data" name="upload" action="" method="post">
<table class="formtable" cellspacing="0" border="0">
<tbody>
<tr class="tallrow">
<td class="label">
Upload Image:
<br/>
<small>
You can upload
<br/>
JPG, GIF or PNG
<br/>
files.
</small>
</td>
<td>
<div id="files">
<div id="1">
<input id="file1" class="inputfile" type="file" name="file1" size="22"/>
</div>
</div>
</td>
</tr>
</tbody>
</table>
<div class="formbuttons">
<input id="" class="inputbutton" type="submit" value="Upload Tattoo" name="Upload" />
<br/>
<small>The file size limit 1.5 MB. If your upload does not work, try uploading a smaller picture.</small>
<br/>
</div>
<?php
}
?>

但是当我执行此代码并且用户按下“上传”按钮时,$ _FILES ['file1'] ['name']的值变为空白。

这个代码在Facebook应用程序中是否允许?如果没有,上传文件的正确方法是什么?

由于

修改

好的问题是facebook。他们从任何请求中删除所有文件标签!我们建议使用iframe代替!

感谢大家的帮助!

3 个答案:

答案 0 :(得分:3)

确定。发现了问题。 Facebook在发送请求之前剥离所有文件标签。解决方案是改为使用iframe。

答案 1 :(得分:1)

在尝试访问文件名之前,请尝试此操作...

switch ($_FILES['file1']['error']) {
  case UPLOAD_ERR_INI_SIZE:
   echo '<p class="warning">File Upload Failed! File too large.</p>';
   break;
  case UPLOAD_ERR_FORM_SIZE:
   echo '<p class="warning">File Upload Failed! File exceeds limit.</p>';
   break;
  case UPLOAD_ERR_PARTIAL:
   echo '<p class="warning">File Upload Failed! Please try again.</p>';
   break;
  case UPLOAD_ERR_NO_TMP_DIR:
   echo '<p class="warning">File Upload Failed! No temp directory.</p>';
   break;
  case UPLOAD_ERR_CANT_WRITE:
   echo '<p class="warning">File Upload Failed! Failed to write to disk.</p>';
   break;
  case UPLOAD_ERR_EXTENSION:
   echo '<p class="warning">File Upload Failed!</p>';
   break;
}

这应该告诉你问题所在。

答案 2 :(得分:0)

您的html-markup没有表单结束标记。

<form>

</form>

此外,您的表单操作应指向自身或处理图像处理的页面(在您的情况下,相同的文件)

<?php
echo("<form id=\"formid\" name=\"formid\" method=\"post\" action=\"".$PHP_SELF."\"

</form>");
?>