PHP:
// If the user accessed the page by form submittal
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$filename = $_FILES["file-input"]["name"];
$extension = pathinfo($filename, PATHINFO_EXTENSION);
$filesize = filesize($filename);
$max_filesize = 524288;
// Array to hold errors
$errors = array();
if (!$filename) {
array_push($errors, "You didn't actually upload anything!");
}
else if ($extension != "txt") {
array_push($errors, "That's not a valid file-type. Please only use txt files.");
}
else if (filesize($filename)) {
array_push($errors, "The txt file must not be empty. Give us a good story.");
}
HTML:
<div class="upload-form">
<form action="" method="post" enctype="multipart/form-data">
<div class="upload">
<input type="file" name="file-input">
<span class="input-filename">Select a file...
</span>
<input type="button" value="Browse">
</div>
<input type="submit" name="submit" value="Upload">
<span class="valid-formats">Valid input: .txt files <= 512 KB</span>
</form>
</div>
我收到了错误:
警告:filesize():todo.txt中的stat失败 ... / Dropbox的/项目/网站 第34行的Projects / serverside / assignment2 / index.php
警告:filesize():todo.txt中的stat失败 ... / Dropbox的/项目/网站 第46行的Projects / serverside / assignment2 / index.php
警告:file_get_contents(todo.txt):无法打开流:没有这样的 文件或目录在... / Dropbox / Projects / Website中 第77行的Projects / serverside / assignment2 / index.php
答案 0 :(得分:2)
该文件不在$_FILES['file-input']['name']
中。这将告诉您上传时客户端计算机上文件的文件名。 PHP将文件存储在服务器上的$_FILES['file-input']['tmp_name']
中。因此,pathinfo
将无效(它要求文件位于磁盘上)。
您可以在点上拆分$_FILES['file-input']['name']
,并获取最后一个值:
$parts = explode(".", $_FILES['file-input']['name']);
$extension = end($parts);
答案 1 :(得分:0)
请注意在不可写的文件/目录上使用此功能:您将收到如下警告:
警告:filesize()[function.filesize]:第123行的/var/www/xxx/yyy.php中/var/www/xxx/yyy.php的统计信息失败
答案 2 :(得分:0)
上传的文件路径存储在$_FILES["file-input"]["tmp_name"];
中,如果要对文件执行操作,则需要使用该路径。
您目前正在使用$_FILES["file-input"]["name"]
,这不是您想要的。它包含用户机器上的原始文件名。
答案 3 :(得分:0)
试试吧。
move_uploaded_file($_FILES['file-input']['tmp_name'],"file_upload_location/".$_FILES['file-input']['name']);
它可能有用。