我试图让用户使用以下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代替!
感谢大家的帮助!
答案 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>");
?>