我正在阅读this php book,我正在进行所有练习。
但是这个我得不到。这是一个HTML表单的示例,允许用户(具有适当的权限)上传文件。
我已经查找了示例中提到的allphp函数,但无法理解实际上传文件的位置。
这些书应该在/ uploads目录里面:
// put the file where we'd like it
$upfile = '/uploads/'.$_FILES['userfile']['name'];
但无法理解,因为它只是为变量赋值......在该行中没有“上传”功能......是吗?
<h1>Upload new news files</h1>
<form enctype="multipart/form-data" action="upload.php" method=post>
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
Upload this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
<body>
<h1>Uploading file...</h1>
<?php
//Check to see if an error code was generated on the upload attempt
if ($_FILES['userfile']['error'] > 0)
{
echo 'Problem: ';
switch ($_FILES['userfile']['error'])
{
case 1: echo 'File exceeded upload_max_filesize';
break;
case 2: echo 'File exceeded max_file_size';
break;
case 3: echo 'File only partially uploaded';
break;
case 4: echo 'No file uploaded';
break;
case 6: echo 'Cannot upload file: No temp directory specified.';
break;
case 7: echo 'Upload failed: Cannot write to disk.';
break;
}
exit;
}
// Does the file have the right MIME type?
if ($_FILES['userfile']['type'] != 'text/plain')
{
echo 'Problem: file is not plain text';
exit;
}
// put the file where we'd like it
$upfile = '/uploads/'.$_FILES['userfile']['name'];
if (is_uploaded_file($_FILES['userfile']['tmp_name']))
{
if (!move_uploaded_file($_FILES['userfile']['tmp_name'], $upfile))
{
echo 'Problem: Could not move file to destination directory';
exit;
}
}
else
{
echo 'Problem: Possible file upload attack. Filename: ';
echo $_FILES['userfile']['name'];
exit;
}
echo 'File uploaded successfully<br><br>';
// reformat the file contents
$fp = fopen($upfile, 'r');
$contents = fread ($fp, filesize ($upfile));
fclose ($fp);
$contents = strip_tags($contents);
$fp = fopen($upfile, 'w');
fwrite($fp, $contents);
fclose($fp);
// show what was uploaded
echo 'Preview of uploaded file contents:<br><hr>';
echo $contents;
echo '<br><hr>';
?>
</body>
答案 0 :(得分:2)
PHP会为您上传。
您需要管理的是将上传的文件从临时文件夹移动到您想要的位置(使用move_uploaded_file
功能执行此操作)。
if(!move_uploaded_file(...
条件会尝试将文件移动到文件夹,如果失败(主要是因为权限问题),将执行if
中的代码。
请注意,您的代码可以通过XSS进行利用:
echo 'Problem: Possible file upload attack. Filename: ';
echo htmlentities($_FILES['userfile']['name']);
exit;
另请注意,任何人都可以上传任何PHP脚本并弄乱您的服务器,不要在生产环境中使用此脚本。
在移动文件之前,你必须检查它的mime类型,它的扩展名,最好把它移动到apache无法解释的地方。
答案 1 :(得分:1)
PHP在您提交表单时收到该文件。假设您的enctype
标记中有<form>
属性,如下所示,浏览器会将文件发送到服务器以供PHP处理。
<form enctype="multipart/form-data">
PHP从浏览器接收文件,并将其存储在php.ini
中配置的临时位置。
然后是验证上传文件并使用$_FILES['userfile']['tmp_name']
临时名称将其移至新位置的情况。
然后使用move_uploaded_file()
函数而不是复制文件或使用copy()
或rename()
移动它,因为函数检查以确保文件是通过PHP的HTTP上传的POST上传机制,作为安全措施。
即使您没有编写任何代码来处理上传,它仍然会发生,并且文件存储在临时目录中以备处理。总而言之,上传是由PHP自动完成的。