【问题标题】:PHP Facebook App Help!PHP Facebook 应用程序帮助!
【发布时间】:2010-10-10 04:28:14
【问题描述】:

我用 PHP 和 HTML 编写了一个 Facebook 应用程序,它在 Opera 浏览器中完美运行,但在 Internet Explorer 或 Google Chrome 中无法运行。

应用的页面索引在:http://apps.facebook.com/zbtmajik/

选择要上传的图片并选择“上传”按钮后,它应该重定向到 http://majik.zbrowntechnology.info(在 iframe 内)并继续重定向到
http://majik.zbrowntechnology.info/?auth_token=e0afbd3167ae943a94b41e940298f2d1&next=http%3A%2F%2Fmajik.zbrowntechnology.info%2Fupload.php

我认为这可能是 iframe 的问题,因为当我提交表单时,它似乎会尝试重定向整个页面,而不仅仅是 iframe 中的内容。

我知道问题出在哪里,但它是为了工作,我需要解决它。任何帮助都会导致您的名字出现在应用程序的感谢页面上!

_____ upload.php___________________ em>_________________________________________________ 有人告诉我可能是处理上传的 PHP 代码,所以这里是:

<?php
include_once('facebook.php');
$appapikey = 'API KEY HERE';
$appsecret = 'SECRET KEY HERE';
$facebook = new Facebook($appapikey, $appsecret);
$fb_user =  $facebook->require_login();

if((!empty($_FILES["uploaded_file"])) && ($_FILES['uploaded_file']['error'] == 0)) {
  $filename = basename($_FILES['uploaded_file']['name']);
  $ext = substr($filename, strrpos($filename, '.') + 1);
  if (($ext == "jpg") && ($_FILES["uploaded_file"]["type"] == "image/jpeg") && 
    ($_FILES["uploaded_file"]["size"] < 350000)) {
      $newname = dirname(__FILE__).'/upload/zbt_'.$fb_user.'.jpg';
      if ((move_uploaded_file($_FILES['uploaded_file']['tmp_name'],$newname))) {
         header("Location: http://majik.zbrowntechnology.info/display.php");
      } else {
         header("Location: home.php?Fatal");
      }
  } else {
     header("Location: home.php?Fatal");
  }
} else {
 header("Location: home.php?Fatal");
}
?>

我看过了,似乎什么也找不到,但我也不是一个非常强大的 PHP 程序员。

我再次查看了PHP文档中的代码,发现问题出在这一行:if((!empty($_FILES["uploaded_file"])) && ($_FILES['uploaded_file' ]['错误'] == 0)) {。虽然不确定它到底是什么。

【问题讨论】:

    标签: php internet-explorer facebook iframe


    【解决方案1】:

    将form 的target 属性更改为“sourceframe”(iframe 的name 值)。

    <form enctype="multipart/form-data" method="POST" action="http://majik.zbrowntechnology.info/upload.php" target="_self">
      <input type="hidden" value="1000000" name="MAX_FILE_SIZE">
      <input type="file" style="height: 70px; font-size: 20px;" size="50" accept="image/.jpg" id="file" name="uploaded_file">
    </form>
    

    变成

    <form enctype="multipart/form-data" method="POST" action="http://majik.zbrowntechnology.info/upload.php" target="sourceframe">
      <input type="hidden" value="1000000" name="MAX_FILE_SIZE">
      <input type="file" style="height: 70px; font-size: 20px;" size="50" accept="image/.jpg" id="file" name="uploaded_file">
    </form>
    

    这在 FF3.6 和 Chrome6.0 中测试正常

    另外,作为旁注,iframe 中显示的页面的 HTML 标记不是最清晰的 - 您可能还想在某个阶段进行处理。

    【讨论】:

    • 我刚试过。我将表单更改为您拥有的方式,但在 Internet Explorer 和现在的 Opera 中存在同样的问题。我需要它至少在 Internet Explorer 中正常工作。还有什么想法吗?
    • 刚刚在 Chrome 中测试过它,它做同样的事情。现在,所有的浏览器都这样做了。我想知道它在做什么以及为什么。
    • 我不确定您是否在说我的建议 A) 解决了所有人的问题,B) 解决了某些人的问题,或者 C) 问题现在影响了所有浏览器。如果您可以重新评论详细信息,那就太好了。
    • 与此同时,我强烈建议您清理页面的标记(在iframe 中看到的那个。IE 以极其无情而臭名昭著,如果它被赋予非标准标记,这可能会导致您的问题。查看了您的标记,如果不必要的 div 似乎会使用很多,包括一个包含form 开头的标记,然后以单独的(而不是直接的)结尾已连接) div 在页面下方,您只是在自找麻烦。甚至可以尝试使用精简的基本版本的表单?
    • 推荐测试:1) 将当前的upload.php 脚本替换为只包含header('Location: test.htm'); 调用的脚本。 2) 在test.htm 中创建一个易于识别的基本文件。加载您的应用程序并查看重定向是否会影响事物。如果不是,那么问题出在其他地方。关于学分 - 不要担心直接归功于我 - 如果您想归功于 StackOverflow 并链接到它,请随意。很高兴与公众分享。
    【解决方案2】:

    我在问题中查看了您的 PHP 脚本。由于我们已经消除了重定向问题的原因,让我们看看上传处理程序。

    我已经重写了脚本,并包含了一堆调试消息,并且我还添加了一行,如果用户上传第二个文件,它将删除现有文件。

    <?php
    
    include_once( 'facebook.php' );
    $appapikey = 'API KEY HERE';
    $appsecret = 'SECRET KEY HERE';
    $facebook  = new Facebook( $appapikey , $appsecret );
    $fb_user   = $facebook->require_login();
    
    if( empty( $_FILES['uploaded_file'] )
        || $_FILES['uploaded_file']['error']!=0
        || !preg_match( '/\.jpe?g$/i' , basename( $_FILES['uploaded_file']['name'] ) )
        || $_FILES['uploaded_file']['type']!='image/jpeg'
        || $_FILES['uploaded_file']['size']>350000 ){
     /* DEBUG CODE - START */
      echo '<h2>Error Detected</h2>';
      echo '<ul>';
        echo ( empty( $_FILES['uploaded_file'] )
             ? '<li>No Files - Empty</li>' : '' );
        echo ( $_FILES['uploaded_file']['error']!=0
             ? '<li>Error '.implode(',',$_FILES['uploaded_file']['error']).'</li>' : '' );
        echo ( !preg_match( '/\.jpe?g$/i' , basename( $_FILES['uploaded_file']['name'] ) )
             ? '<li>Filename does not look like a JPEG</li>' : '' );
        echo ( $_FILES['uploaded_file']['type']!='image/jpeg'
             ? '<li>Filetype is '.$_FILES['uploaded_file']['type'].'</li>' : '' );
        echo ( $_FILES['uploaded_file']['size']>350000
             ? '<li>Filesize is '.$_FILES['uploaded_file']['size'].'</li>' : '' );
      echo '</ul>';
     /* DEBUG CODE - END */
      if( !headers_sent() )
        header( 'Location: home.php?fatal' );
      die();
    }
    
    $newname = dirname(__FILE__).'/upload/zbt_'.$fb_user.'.jpg';
    
    if( file_exists( $newname ) ){
     # User file already exists - Delete the Existing one.
      unlink( $newname );
    }
    
    if( !move_uploaded_file( $_FILES['uploaded_file']['tmp_name'] , $newname ) ){
     /* DEBUG CODE - START */
      echo '<h2>Error Detected</h2>';
      echo '<ul>';
        echo '<li>Unable to Move File</li>';
      echo '</ul>';
     /* DEBUG CODE - END */
      if( !headers_sent() )
        header( 'Location: home.php?fatal' );
      die();
    }
    
    header( 'Location: display.php' );
    die();
    

    如果/当它起作用时,删除/* DEBUG CODE - XXX */ 集合之间的任何内容。

    【讨论】:

    • 好的,我运行了你为我写的脚本,顺便谢谢你。它确实检测到错误并显示以下内容:1)。没有文件 - 空 2)。文件名看起来不像 JPEG,最后是 3)。 Filetype 是什么意思,表单出现错误,意识到文件已被选择?
    • 我在上面写了一个错字——empty() 检查的逻辑颠倒了——我已经更正了。听起来您尝试上传非 jpeg 文件。
    • 好的,更正了。现在它在 Opera 中再次正常工作,但在 Internet Explorer 中无法正常工作。它与我最初发布此问题时所做的事情相同。只是,现在它还显示了我在上面作为评论发布的相同信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多