0

有人可以帮助我在 IIS 7 中使用 PHP FastCGI 中的 ExtJS 4 进行必要的配置(或帮助解决)文件上传吗?应用程序用户界面运行良好,但文件没有移动到\file_upload\public\tmp\upload文件夹中。

更多详情:

在过去的几天里,我一直在为 ExtJS 4 尝试不同的多文件上传小部件。有些只适用于新的 HTML 5 文件 API,但在 Internet Explorer 中被破坏了。有些只是用户界面不能很好地与 ExtJS 4 配合使用,所以我认为它们看起来有点傻。我终于找到了一个适用于所有浏览器的,尽管它很简单!我已经在 IIS 7 上的 Windows Server 2008 中使用 PHP FastCGI 配置了下面的 ExtJS/PHP 多文件上传应用程序(博客链接)。我有一些设置说明。除了配置和其他一些让应用程序用户界面正常工作的事情外,我并没有真正改变应用程序的任何内容。

Windows 安装说明:

1.) 小部件在这里找到:

http://blog.debug.cz/2012/05/file-upload-widget-for-extjs-4x.html

这是演示:

http://debug.cz/demo/upload/

在 GitHub 上下载源代码:

https://github.com/ivan-novakov/extjs-upload-widget

2.) 为简单起见,将提取的文件放在桌面上并重命名根文件夹“file_upload”

3.) 下载 ExtJS 4 并将根 ExtJS 4 文件夹重命名为“extjs”并放置在此文件夹中:

\file_upload\public\[extjs]

下载并解压:

http://cdn.sencha.io/ext-4.1.0-gpl.zip

4.) (在 Windows 中)将“上传”快捷方式文件重命名为“upload_old”(或直接删除),并将实际上传文件夹复制\file_upload\lib\upload到文件夹中\file_upload\public\external\upload

5.)\file_upload\public\tmp\upload为 PHP 文件创建文件上传文件夹以放置其文件

define('UPLOAD_DIR', '/tmp/upload/');

6.) 在 IIS 7 中的 Windows Server 2008 (x64) 中设置 PHP

  • 在 Windows Server 2008 上的 IIS 7 中打开 CGI

  • 已下载 IIS 7.0 (x64) 管理包

  • 遵循以下说明:

http://www.howtogeek.com/50432/how-to-install-php-on-iis-7-for-windows-server-2008/

使用了这些 php.ini 设置:

cgi.force_redirect = 0

fastcgi.impersonate = 1

extension_dir = "D:\Program Files\php\ext"

date.timezone = "America/Chicago"

extension=php_curl.dll"

display_errors = On ==========> more notes below

upload_tmp_dir = "{desktop path}\file_upload\public\tmp\upload"

7.) 放置在我的 php 文件的顶部,因为 IIS 7 显然存在一些问题???

<?PHP
ini_set('display_errors',true);

8.) 按照此处的答案在 IIS 7 中为 PHP 配置 HTTP 错误

https://serverfault.com/questions/19561/how-can-i-display-and-log-php-errors-on-iis7

  • IIS 管理器 > 单击网站 > 配置编辑器 > system.webServer > httpErrors > 将“DetailedLocalOnly”更改为“详细”

9.)在C:\Windows\php.ini我将此配置设置设置为“开”

display_errors = On

还是应该将此配置设置设置为“stderr”,因为我在 IIS 7 中使用 FastCGI?

; This directive controls whether or not and where PHP will output errors,
; notices and warnings too. Error output is very useful during development, but
; it could be very dangerous in production environments. Depending on the code
; which is triggering the error, sensitive information could potentially leak
; out of your application such as database usernames and passwords or worse.
; It's recommended that errors be logged on production servers rather than
; having the errors sent to STDOUT.
; Possible Values:
;   Off = Do not display any errors
;   stderr = Display errors to STDERR (affects only CGI/CLI binaries!)
;   On or stdout = Display errors to STDOUT
; Default Value: On
; Development Value: On
; Production Value: Off
; http://php.net/display-errors
display_errors = On

10.) 更改 \file_upload 文件夹及其子文件夹的安全性

  • IIS_IUSRS 用户组(或只是 IUSR 用户)

  • IIS APPPOOL{应用程序池}

11.) 将该\file_upload文件用作您的 IIS 站点 Web 根文件夹

4

1 回答 1

0

不得不做一些事情来解决这个问题:

我意识到默认的“upload.php”文件只是每次都为每个文件提供一个成功的虚假 JSON 响应。所以我做了一个“upload.php”的备份,并称之为“upload_old.php”。然后我在“upload_into_dir.php”上保存并重命名为“upload.php”,因为 ExtJS 代码在 7 个不同的地方引用了“upload.php”(虽然有些地方只是文档)。

然后,当我尝试上传文件时,出现此错误:

Ext.Error: You're trying to decode an invalid JSON String: <br />
<b>Warning</b>:  fopen(/tmp/upload/test.jpg): failed to open stream: No such file or directory in <b>C:\Users\macgyver\Desktop\file_upload\public\upload.php</b> on line <b>28</b><br />
{"success":false,"message":"Error writing to file"}

我必须放一个“。” 在 Windows 中的路径前面,以便 PHP 识别我的文件。然后它工作得很好。

define('UPLOAD_DIR', './tmp/upload/');
于 2013-03-15T22:46:48.663 回答