我对php世界还很陌生,并且一直在为我的一家公司创建一个库存跟踪系统。大多数基础工作都有效,但我的“上传pdf”功能出现问题。即使它工作并将pdf文件上传到其目标位置,我也无法将文件名($ docid)作为一个整数,每次提交时自动递增,以便文件永远不会具有相同的名称。以下是我工作的代码:
$pdfPath = "/Documents/TEST/";
$maxSize = 102400000000;
$docid = TEST;
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['upload_pdf'])) {
if (is_uploaded_file($_FILES['filepdf']['tmp_name'])) {
if ($_FILES['filepdf']['type'] != "application/pdf") {
echo '<p>The file is not in PDF</p>';
} else if ($_FILES['filepdf']['size'] > $maxSize) {
echo '<p class="error">File is too big! Max size is =' . $maxSize . 'KB</p>';
} else {
$menuName = "Order_Receipt_".$docid.".pdf";
$result = move_uploaded_file($_FILES['filepdf']['tmp_name'], $pdfPath . $menuName);
if ($result == 1) {
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL=http://localhost/website/enter_new_order_success.html">';
} else {
echo '<p class="error">Error</p>';
}
}
}
我知道我需要某种循环来自动增加$ docid变量,但我似乎无法弄明白。我已经阅读了这个主题,但if语句的自动增量让我失望了。任何帮助将不胜感激。
干杯
答案 0 :(得分:1)
好吧,除非您存储条目以便在数据库或类似数据库中进行跟踪,否则您可以检查上传文件夹中的条目并将其增加一个。
glob函数对此有用: http://php.net/manual/en/function.glob.php
$myFiles = sort(glob('/Documents/TEST/*.pdf')); // returns an array of pdf files in the target folder. Using sort to sort the array e.g. file_1_.pdf,file_2_.pdf,file_3_.pdf, etc
//last element
$lastFile = end($myFiles); //returns the last file in the array
//get the number and increment it by one
$number = explode('_',$lastFile);
$newNumber = $number[1] + 1; //add this to the name of your uploaded php file.
$pdfUploadedFile= "Order_Receipt_".$newNumber."_.pdf";
正如评论中所指出的......我发现用时间戳生成的字符串命名它更好。而且不要忘记字符串周围的引号。
$docid = TEST;
should be:
$docid = 'TEST';
修改强>
更好的是我会在格式化的日期命名它。
$pdfUploadedFile= "Order_Receipt_".date("Y-m-d-H-i-s").".pdf"; // will output something like Order_receipt_2014-09-24-11-14-44.pdf