עזרה בקוד
-
יש לי כאן קוד שאמור לעלות קובץ php גדול ומשום מה זה מעלה רק חלק קטן ממנו (באמצע) ובלי שום תגובה מישהו יכול לעזור?
<?php // הגדרות קבועות (חובה לעדכן) $API_BASE_URL = "https://www.call2all.co.il/ym/api/"; $TOKEN = ""; // טוקן הגישה $REMOTE_FILE_URL = "-כאן צריך להשים את הכתובת (בכוונה שיניתי( "; // כתובת הקובץ המקורית $TARGET_PATH = "ivr2:/200/uploaded_file.mp3"; // נתיב היעד (חובה ivr2:) [3, 4] $MAX_FILE_SIZE_MB = 150; // הגבלה לגודל הקובץ $CHUNK_SIZE = 5 * 1024 * 1024; // 5MB למקטע (קטן מ-50MB המגבלה המקסימלית) [3, 4] // הגדרות קובץ מקומיות $QQUUID = uniqid('', true); // מזהה ID רנדומלי שיש ליצור לפני הבקשה הראשונה [5, 7] $TEMP_DIR = 'temp_uploads/'; $TEMP_FILE_PATH = $TEMP_DIR . basename($TARGET_PATH); $MAX_FILE_SIZE_BYTES = $MAX_FILE_SIZE_MB * 1024 * 1024; // פונקציית שליחת בקשת cURL (מותאם לשיטת POST multipart/form-data) function send_curl_request($url, $fields, $is_done_request = false) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); if (!$is_done_request) { // שלב א': העלאת מקטע curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); } // שלב ב': בקשת חיבור (UploadFile?done) היא לרוב GET או POST עם פרמטרים ב-URL, // כאן נשתמש ב-GET אם הפרמטרים כבר ב-URL $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($http_code != 200) { throw new Exception("HTTP Error {$http_code} | Response: " . $response); } return json_decode($response, true); } // 1. הורדת קובץ חיצונית ושמירה מקומית + בדיקת גודל if (!is_dir($TEMP_DIR)) { mkdir($TEMP_DIR, 0777, true); } if (!@file_put_contents($TEMP_FILE_PATH, @file_get_contents($REMOTE_FILE_URL))) { die("שגיאה בהורדה או שמירה מקומית של הקובץ."); } $file_size = filesize($TEMP_FILE_PATH); $file_name = basename($TEMP_FILE_PATH); if ($file_size > $MAX_FILE_SIZE_BYTES) { unlink($TEMP_FILE_PATH); die("הקובץ גדול מהמגבלה המוגדרת."); } // חישוב מקטעים $total_parts = ceil($file_size / $CHUNK_SIZE); $qq_total_parts_api = $total_parts + 1; // כולל בקשת החיבור (done) [5-8] // -------------------------------------------------- // שלב א': העלאת מקטעי הקובץ (Chunks) // -------------------------------------------------- $handle = fopen($TEMP_FILE_PATH, "r"); $chunk_index = 0; $byte_offset = 0; $upload_success = true; if ($handle) { while (!feof($handle)) { $chunk_data = fread($handle, $CHUNK_SIZE); $current_chunk_size = strlen($chunk_data); if ($current_chunk_size == 0) { break; } // יצירת קובץ זמני עבור המקטע הנוכחי (דרוש עבור cURL) $temp_chunk_file = $TEMP_DIR . "chunk_{$chunk_index}"; file_put_contents($temp_chunk_file, $chunk_data); // פרמטרים הנדרשים לבקשת העלאת מקטע [5, 7] $post_fields = [ 'token' => $TOKEN, 'path' => $TARGET_PATH, 'qquuid' => $QQUUID, 'qqpartindex' => $chunk_index, 'qqpartbyteoffset' => $byte_offset, 'qqchunksize' => $current_chunk_size, 'qqtotalparts' => $qq_total_parts_api, 'qqtotalfilesize' => $file_size, 'qqfilename' => $file_name, 'qqfile' => new CURLFile($temp_chunk_file, mime_content_type($temp_chunk_file), $file_name) // העלאת המקטע הנוכחי // ניתן להוסיף convertAudio, autoNumbering ו-tts כאן אם צריך [3-5, 7] ]; try { $response = send_curl_request($API_BASE_URL . 'UploadFile', $post_fields); if ($response['responseStatus'] !== 'OK') { $upload_success = false; break; } } catch (Exception $e) { $upload_success = false; break; } // מחיקת קובץ המקטע הזמני unlink($temp_chunk_file); $chunk_index++; $byte_offset += $current_chunk_size; } fclose($handle); } else { die("שגיאה: לא ניתן לקרוא את הקובץ המקומי."); } // -------------------------------------------------- // שלב ב': סיום העלאה ובקשת חיבור לקבצים // -------------------------------------------------- if ($upload_success) { // פרמטרים הנדרשים לבקשת החיבור [6, 8] $done_params = [ 'token' => $TOKEN, 'path' => $TARGET_PATH, 'qquuid' => $QQUUID, 'qqfilename' => $file_name, 'qqtotalfilesize' => $file_size, 'qqtotalparts' => $qq_total_parts_api, // אם הועברו convertAudio, autoNumbering, tts יש לצרף גם לכאן [6, 8] ]; $query_string = http_build_query($done_params); $done_url = $API_BASE_URL . "UploadFile?done&" . $query_string; try { // שליחת בקשה לחיבור הקטעים (UploadFile?done) $response_data = send_curl_request($done_url, null, true); if (isset($response_data['responseStatus']) && $response_data['responseStatus'] === 'OK') { // פעולת ה-API הושלמה בהצלחה // תוצאה: $response_data מכילה path ו-size [9, 10] } else { // שגיאה בחיבור הקבצים } } catch (Exception $e) { // שגיאה בבקשת החיבור } } else { // העלאת המקטעים נכשלה } // ניקוי הקובץ הזמני בשרת המקומי שלך if (file_exists($TEMP_FILE_PATH)) { unlink($TEMP_FILE_PATH); } ?> -
יש לי כאן קוד שאמור לעלות קובץ php גדול ומשום מה זה מעלה רק חלק קטן ממנו (באמצע) ובלי שום תגובה מישהו יכול לעזור?
<?php // הגדרות קבועות (חובה לעדכן) $API_BASE_URL = "https://www.call2all.co.il/ym/api/"; $TOKEN = ""; // טוקן הגישה $REMOTE_FILE_URL = "-כאן צריך להשים את הכתובת (בכוונה שיניתי( "; // כתובת הקובץ המקורית $TARGET_PATH = "ivr2:/200/uploaded_file.mp3"; // נתיב היעד (חובה ivr2:) [3, 4] $MAX_FILE_SIZE_MB = 150; // הגבלה לגודל הקובץ $CHUNK_SIZE = 5 * 1024 * 1024; // 5MB למקטע (קטן מ-50MB המגבלה המקסימלית) [3, 4] // הגדרות קובץ מקומיות $QQUUID = uniqid('', true); // מזהה ID רנדומלי שיש ליצור לפני הבקשה הראשונה [5, 7] $TEMP_DIR = 'temp_uploads/'; $TEMP_FILE_PATH = $TEMP_DIR . basename($TARGET_PATH); $MAX_FILE_SIZE_BYTES = $MAX_FILE_SIZE_MB * 1024 * 1024; // פונקציית שליחת בקשת cURL (מותאם לשיטת POST multipart/form-data) function send_curl_request($url, $fields, $is_done_request = false) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); if (!$is_done_request) { // שלב א': העלאת מקטע curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); } // שלב ב': בקשת חיבור (UploadFile?done) היא לרוב GET או POST עם פרמטרים ב-URL, // כאן נשתמש ב-GET אם הפרמטרים כבר ב-URL $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($http_code != 200) { throw new Exception("HTTP Error {$http_code} | Response: " . $response); } return json_decode($response, true); } // 1. הורדת קובץ חיצונית ושמירה מקומית + בדיקת גודל if (!is_dir($TEMP_DIR)) { mkdir($TEMP_DIR, 0777, true); } if (!@file_put_contents($TEMP_FILE_PATH, @file_get_contents($REMOTE_FILE_URL))) { die("שגיאה בהורדה או שמירה מקומית של הקובץ."); } $file_size = filesize($TEMP_FILE_PATH); $file_name = basename($TEMP_FILE_PATH); if ($file_size > $MAX_FILE_SIZE_BYTES) { unlink($TEMP_FILE_PATH); die("הקובץ גדול מהמגבלה המוגדרת."); } // חישוב מקטעים $total_parts = ceil($file_size / $CHUNK_SIZE); $qq_total_parts_api = $total_parts + 1; // כולל בקשת החיבור (done) [5-8] // -------------------------------------------------- // שלב א': העלאת מקטעי הקובץ (Chunks) // -------------------------------------------------- $handle = fopen($TEMP_FILE_PATH, "r"); $chunk_index = 0; $byte_offset = 0; $upload_success = true; if ($handle) { while (!feof($handle)) { $chunk_data = fread($handle, $CHUNK_SIZE); $current_chunk_size = strlen($chunk_data); if ($current_chunk_size == 0) { break; } // יצירת קובץ זמני עבור המקטע הנוכחי (דרוש עבור cURL) $temp_chunk_file = $TEMP_DIR . "chunk_{$chunk_index}"; file_put_contents($temp_chunk_file, $chunk_data); // פרמטרים הנדרשים לבקשת העלאת מקטע [5, 7] $post_fields = [ 'token' => $TOKEN, 'path' => $TARGET_PATH, 'qquuid' => $QQUUID, 'qqpartindex' => $chunk_index, 'qqpartbyteoffset' => $byte_offset, 'qqchunksize' => $current_chunk_size, 'qqtotalparts' => $qq_total_parts_api, 'qqtotalfilesize' => $file_size, 'qqfilename' => $file_name, 'qqfile' => new CURLFile($temp_chunk_file, mime_content_type($temp_chunk_file), $file_name) // העלאת המקטע הנוכחי // ניתן להוסיף convertAudio, autoNumbering ו-tts כאן אם צריך [3-5, 7] ]; try { $response = send_curl_request($API_BASE_URL . 'UploadFile', $post_fields); if ($response['responseStatus'] !== 'OK') { $upload_success = false; break; } } catch (Exception $e) { $upload_success = false; break; } // מחיקת קובץ המקטע הזמני unlink($temp_chunk_file); $chunk_index++; $byte_offset += $current_chunk_size; } fclose($handle); } else { die("שגיאה: לא ניתן לקרוא את הקובץ המקומי."); } // -------------------------------------------------- // שלב ב': סיום העלאה ובקשת חיבור לקבצים // -------------------------------------------------- if ($upload_success) { // פרמטרים הנדרשים לבקשת החיבור [6, 8] $done_params = [ 'token' => $TOKEN, 'path' => $TARGET_PATH, 'qquuid' => $QQUUID, 'qqfilename' => $file_name, 'qqtotalfilesize' => $file_size, 'qqtotalparts' => $qq_total_parts_api, // אם הועברו convertAudio, autoNumbering, tts יש לצרף גם לכאן [6, 8] ]; $query_string = http_build_query($done_params); $done_url = $API_BASE_URL . "UploadFile?done&" . $query_string; try { // שליחת בקשה לחיבור הקטעים (UploadFile?done) $response_data = send_curl_request($done_url, null, true); if (isset($response_data['responseStatus']) && $response_data['responseStatus'] === 'OK') { // פעולת ה-API הושלמה בהצלחה // תוצאה: $response_data מכילה path ו-size [9, 10] } else { // שגיאה בחיבור הקבצים } } catch (Exception $e) { // שגיאה בבקשת החיבור } } else { // העלאת המקטעים נכשלה } // ניקוי הקובץ הזמני בשרת המקומי שלך if (file_exists($TEMP_FILE_PATH)) { unlink($TEMP_FILE_PATH); } ?>לא מבין בזה, אבל הgpt אומר שיש כמה טעויות.
-
@עידו לא עברתי על הכל אבל כבר ראיתי כמה קשקושים
-
@121244 בד"כ הוא לא מקשקש אם מביאים לו תיעוד מלא כמו שהבאתי. אבל אם אתה מבין בזה וראית קשקושים, אז לא אתווכח.
-
@121244 תנסה לבקש קוד תקין ותראה מה יתן, מה יש להפסיד?
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות