简单的PHP文件上传表单不起作用?

时间:2011-12-05 15:10:20

标签: php forms upload

我是这个人的新手并处于学习阶段。我创建了一个如下表单,

<html>
<body>    
<form enctype="multipart/form-data" action="/cgi-bin/FileUpload.php" method="POST">
<label for="file">Filename:</label>
<input type="file" name="ufile"/>
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

我的php脚本看起来像,

    #!/usr/bin/php
<?
header("Content-type:text/html");
echo "\n";
if (isset($HTTP_POST_VARS['submit'])){
    echo "HTTP_POST_VARS['submit'] is set" . "<br />";
}

if (empty($_POST)) {
    echo "Empty POST !" . "<br />";
}
if(isset($_POST['type'])){
    echo "POST['type'] is set to " . $_POST['type'] . "<br />";
}

if (isset($_SERVER['REQUEST_METHOD'])){
    echo "_SERVER['REQUEST_METHOD'] is set and REQUEST_METHOD = " . $_SERVER['REQUEST_METHOD'] . "<br />";
}

if (empty($_FILES)){
    echo "_FILES is empty ! " . "<br /> <br />";
}

putput看起来像,

空帖! _SERVER [&#39; REQUEST_METHOD&#39;]已设置且REQUEST_METHOD = POST _FILES是空的!

php.ini中的相关项目如下所示,

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
upload_tmp_dir = /tmp

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 2M

; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20

; Maximum size of POST data that PHP will accept.
; http://php.net/post-max-size
post_max_size = 10M

现在,为什么_POST和_FILES变空了?

2 个答案:

答案 0 :(得分:1)

一些事情:

1

    #!/usr/bin/php
^^^^

PHP解释器将把shebang之前的空格视为输出。 shebang应该出现在文件的最开头

2

HTTP_POST_VARS已弃用,不应再使用了,除非你使用的是古老的PHP版本,在这种情况下你真的应该升级。

3

phpinfo();调用放入您的脚本中。它将显示全局设置和本地设置。配置文件(.htaccess,稍后在加载链中的另一个.ini等)可能会覆盖您的设置并禁用文件上载。如果phpinfo输出中的local列未显示正确的设置,则必须确定覆盖的发生位置。

4

不要做“blahblah是空的”之类的,而是尝试var_dump($whatever),它会显示实际的空数组,或者它的内容(类型+大小+数据)是否存在。< / p>

答案 1 :(得分:0)

除了上面的评论,还可以尝试var_dump($ _ POST)和var_dump($ _ FILES);这将转储发布到页面的每个文件和值。
如果它不起作用,并且您的php.ini设置与之前编写的一样,则可以尝试在操作页面上使用ini_set()函数。使用ini_set()设置file_uploads和其他配置设置。 Ini_set()不适用于所有设置,但它应该足以让您入门。
不要忘记可靠的phpinfo()函数。