• דף הבית
    • אינדקס קישורים
    • פוסטים אחרונים
    • משתמשים
    • חיפוש בהגדרות המתקדמות
    • חיפוש גוגל בפורום
    • ניהול המערכת
    • ניהול המערכת - שרת private
    • הרשמה
    • התחברות

    עזרה בקוד

    מתוזמן נעוץ נעול הועבר פורום PHP
    5 פוסטים 2 כותבים 263 צפיות 1 עוקבים
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • תגובה כנושא
    התחברו כדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • 1 מנותק
      121244
      נערך לאחרונה על ידי

      יש לי כאן קוד שאמור לעלות קובץ 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);
      }
      ?>
      
      ע תגובה 1 תגובה אחרונה תגובה ציטוט 0
      • ע מנותק
        עידו @121244
        נערך לאחרונה על ידי

        @121244 כתב בעזרה בקוד:

        יש לי כאן קוד שאמור לעלות קובץ 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 אומר שיש כמה טעויות.

        1 תגובה 1 תגובה אחרונה תגובה ציטוט 0
        • 1 מנותק
          121244 @עידו
          נערך לאחרונה על ידי

          @עידו לא עברתי על הכל אבל כבר ראיתי כמה קשקושים

          ע 2 תגובות תגובה אחרונה תגובה ציטוט 0
          • ע מנותק
            עידו @121244
            נערך לאחרונה על ידי

            @121244 בד"כ הוא לא מקשקש אם מביאים לו תיעוד מלא כמו שהבאתי. אבל אם אתה מבין בזה וראית קשקושים, אז לא אתווכח.

            תגובה 1 תגובה אחרונה תגובה ציטוט 0
            • ע מנותק
              עידו @121244
              נערך לאחרונה על ידי

              @121244 תנסה לבקש קוד תקין ותראה מה יתן, מה יש להפסיד?

              תגובה 1 תגובה אחרונה תגובה ציטוט 0

              שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.

              נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.

              בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗

              הרשמה התחברות
              • פוסט ראשון
                פוסט אחרון