העלאת קבצים PHP
-
ההגבלה על גודל הקובץ היא קודם כל כי אתה מעלה את הקובץ כולו בפעם אחת.
יש מגבלה על גודל הראם, אלא אם כן אתה מזרים ישירות את הסטרים לקובץ. לא מכיר מספיק PHP בשביל לדעת האם זה קיים..הייתי מציע לך להשתמש בפרוטוקול של tus.io, הרעיון הוא האפשרות לחזור ולהמשיך העלאה של קובץ. והקובץ נשלח בחלקים קטנים. זה גם מקטין את הסיכון אבטחה שקיים כשמאפשרים בקשות POST גדולות.
https://github.com/ankitpokhrel/tus-php זה יישום של הפרוטוקול הזה בPHP.
לפרונטאנד יש פתרונות כמו https://uppy.io -
גדלי הקובץ מוגדרים ב- PHP.ini
https://stackoverflow.com/questions/2184513/change-the-maximum-upload-file-size -
@chagold זה קוד ששילבתי בין שני המנגנונים, נוא מתחיל להעלות עד שבשלב מסויים הוא מציג את השגיאות שלמטה.
<body> <form action="up.php" method="post" enctype="multipart/form-data"> <br/> <input type="file" name="upload[]" multiple="multiple" /><br/><br/> <input type="submit" value="שלח קובץ" /> <br/> </form>
Notice: Undefined index: myfile in C:\xampp\htdocs\tool\up\up.php on line 5 Notice: Trying to access array offset on value of type null in C:\xampp\htdocs\tool\up\up.php on line 5 Notice: Undefined index: myfile in C:\xampp\htdocs\tool\up\up.php on line 9 Notice: Trying to access array offset on value of type null in C:\xampp\htdocs\tool\up\up.php on line 9 Notice: Undefined index: myfile in C:\xampp\htdocs\tool\up\up.php on line 9 Notice: Trying to access array offset on value of type null in C:\xampp\htdocs\tool\up\up.php on line 9 שגיאה בהעברת הקובץ מתיקיית הקבצים הזמניים בשרת למיקום הסופי.
-
@dovid הקוד לבחירת הקובץ שם הוא אותו קוד, והוא עובד יחד עם המערך העלאה ששם, אבל אני רוצה להשתמש במערך ההעלאה שהבאתי כאן למעלה, כי הוא נותן לי קישור לקובץ בסיום ההעלאה, אך השילוב ביניהם נתקע משהו, הקבצים עולים לגמרי, אבל בסוף ההעלאה יש איזה שגיאה, ומוצגות השגיאות שלעיל.
-
-
@אביי אמרת שעשית ניסיון לשלב והוא לא צלח, אבל לא הבאת כזה ניסיון.
הנה שילוב בקוד:<?php $dir = $_SERVER['DOCUMENT_ROOT'] . "\\uploads\\"; $url = '/uploads/'; for ($i = 0; $i < count($_FILES['upload']['name']); $i++) { $fileName = $_FILES['upload']['name'][$i]; $tmpFilePath = $_FILES['upload']['tmp_name'][$i]; $err = $_FILES['upload']['error'][$i]; echo "<div> קובץ: $fileName"; if ($err != 0) { echo "שגיאה בשליחת הקובץ לשרת, קוד שגיאה: $err"; } else { if (move_uploaded_file($tmpFilePath, $dir . $fileName)) { echo " היי, הקובץ הועלה בהצלחה!! <br /> :קח מכאן את הקישור הישיר לקובץ <a href='{$url}{$fileName}'>$fileName<a/> "; } else { echo 'שגיאה בהעברת הקובץ מתיקיית הקבצים הזמניים בשרת למיקום הסופי.'; } } echo "</div>"; }
-
@dovid זה הסתדר! הקוד שלך עובד טוב הבעיה הייתה בי!
לא הגדרתי נכון את המיקום של התיקייה להעלאה, עכשיו שמתי לב לזה וזה עובד מצוין, תודה רבה!אני מעלה את הקוד השלם, לכאן:
html לבחירת הקבצים, (ניתן לבחור כמה, אין מגבלת כמות)<form action="upload1.php" method="post" enctype="multipart/form-data"> <input type="file" name="upload[]" multiple="multiple"> <input type="submit" value="העלה קבצים" > </form>
כאשר "upload1.php" מגדיר את שם הקובץ שמכיל את מערך ההעלאה עצמו.
<?php $dir = $_SERVER['DOCUMENT_ROOT'] . "https://tchumim.com/"; $url = 'https://tchumim.com/'; for ($i = 0; $i < count($_FILES['upload']['name']); $i++) { $fileName = $_FILES['upload']['name'][$i]; $tmpFilePath = $_FILES['upload']['tmp_name'][$i]; $err = $_FILES['upload']['error'][$i]; echo "<div> קובץ: $fileName"; if ($err != 0) { echo "שגיאה בשליחת הקובץ לשרת, קוד שגיאה: $err"; } else { if (move_uploaded_file($tmpFilePath, $dir . $fileName)) { echo " היי, הקובץ הועלה בהצלחה!! <br /> :קח מכאן את הקישור הישיר לקובץ <a href='{$url}{$fileName}'>$fileName<a/> "; } else { echo 'שגיאה בהעברת הקובץ מתיקיית הקבצים הזמניים בשרת למיקום הסופי.'; } } echo "</div>"; }
כאשר במקום "https://tchumim.com/" יש לשים את הקישור לתיקיית האיחסון של הקובץ. (בשורה העליונה כנתיב מספריית המחשב, ובתחתונה עם הדומיין של האתר.