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

    גיבוי המערכת שלכם במחשב האישי בלחיצת כפתור!!!

    מתוזמן נעוץ נעול הועבר עזרה הדדית למשתמשים מתקדמים
    41 פוסטים 9 כותבים 593 צפיות 5 עוקבים
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • תגובה כנושא
    התחברו כדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • א מנותק
      אA @isi
      נערך לאחרונה על ידי

      @isi
      אני ממש עכשיו עושה הרצה אחרונה ומקווה שכל הבאגים סודרו.

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

        גירסא חדשה
        תוקן הבאג שלא קרא גם את שלוחות 00-09 וכן ניתן להוסיף קבצי ini לסריקה בשורה 65 בסוגרים, עושים , 'שם הקובץ' וזהו!

        יש שדרוג שאני רוצה להוסיף, ואשמח אם יש מישהו שיוכל לעזור לי בהרצה של סקריפט לבדיקות או בשליחת בקשה לנטפרי לפתיחת סקריפט לציבור לצורך גיבוי מערכות בימות המשיח.

        הקוד

        <!DOCTYPE html>
        <html lang="he" dir="rtl">
        <head>
            <meta charset="UTF-8">
            <title>גיבוי מערכות בימות המשיח  INI</title>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>
            <style>
                body { font-family: 'Segoe UI', Tahoma, sans-serif; margin: 20px; background-color: #f4f7f6; text-align: right; direction: rtl; }
                .container { max-width: 1100px; margin: auto; background: white; padding: 25px; border-radius: 12px; box-shadow: 0 4px 15px rgba(0,0,0,0.1); }
                .section { border: 1px solid #e0e0e0; padding: 15px; margin-bottom: 15px; border-radius: 8px; background: #fafafa; }
                #logArea { background: #1e1e1e; color: #d4d4d4; padding: 15px; border-radius: 5px; height: 250px; overflow-y: auto; font-family: 'Consolas', monospace; font-size: 13px; margin-top: 10px; }
                .log-info { color: #4fc3f7; }
                .log-success { color: #00ff00; font-weight: bold; }
                .log-error { color: #ff5252; }
                button { padding: 10px 20px; background: #3498db; color: white; border: none; cursor: pointer; border-radius: 5px; font-weight: bold; }
                button:disabled { background: #bdc3c7; }
                input { padding: 10px; margin: 5px; border: 1px solid #ccc; border-radius: 4px; }
                .progress-container { background: #e0e0e0; border-radius: 20px; height: 25px; margin: 15px 0; overflow: hidden; display: none; }
                .progress-bar { width: 0%; height: 100%; background: linear-gradient(90deg, #3498db, #2ecc71); transition: width 0.1s; color: white; text-align: center; line-height: 25px; font-weight: bold; }
                table { width: 100%; border-collapse: collapse; margin-top: 15px; }
                th, td { border: 1px solid #ddd; padding: 10px; text-align: right; }
            </style>
        </head>
        <body>
        
        <div class="container">
            <h2>גיבוי מערכות בימות המשיח</h2>
            
            <div class="section">
                <strong>⚙️ הגדרות:</strong>
                כמות ספרות מקסימלית: <input type="number" id="digitCount" style="width:50px;" value="2">
                שם קובץ ZIP: <input type="text" id="fileNameInput" value="full_system_backup">
            </div>
        
            <div class="section">
                <strong>1. סריקה</strong><br>
                טוקן: <input type="text" id="srcToken" style="width:300px;" placeholder="הכנס טוקן כאן...">
                נתיב התחלה: <input type="text" id="srcPath" style="width:100px;" value="/">
                <button onclick="loadInitialList()">טען רשימת קבצים</button>
            </div>
        
            <div class="section">
                <strong>2. הורדת הקבצים</strong><br>
                <div id="statsBar" style="font-weight:bold; margin-bottom:5px;">ממתין לפעולה...</div>
                <div class="progress-container" id="progContainer">
                    <div id="progBar" class="progress-bar">0%</div>
                </div>
                <button id="downloadBtn" onclick="startDeepDownload()" disabled style="background:#27ae60;">בחר מיקום והורד גיבוי</button>
                <div id="logArea">מוכן לסריקה...</div>
            </div>
        
            <div id="fileArea" style="display:none;">
                <table>
                    <thead>
                        <tr style="background:#eee">
                            <th style="width: 40px;"><input type="checkbox" id="masterCheck" checked onclick="toggleAll(this)"></th>
                            <th>סוג</th>
                            <th>שם</th>
                        </tr>
                    </thead>
                    <tbody id="fileTableBody"></tbody>
                </table>
            </div>
        </div>
        
        <script>
        const INI_FILES = ['ext', 'ivr', 'EnterIDValName', 'EnterIDBlock', 'WhitelList', 'BlackList'];
        let totalBytes = 0;
        let startTime = 0;
        
        function addLog(msg, type = '') {
            const logArea = document.getElementById('logArea');
            const div = document.createElement('div');
            div.className = `log-${type}`;
            div.innerHTML = `[${new Date().toLocaleTimeString()}] ${msg}`;
            logArea.appendChild(div);
            logArea.scrollTop = logArea.scrollHeight;
        }
        
        function updateProgress(percent, text) {
            const container = document.getElementById('progContainer');
            const bar = document.getElementById('progBar');
            container.style.display = 'block';
            bar.style.width = percent + '%';
            bar.innerText = text ? `${text} (${percent}%)` : `${percent}%`;
        }
        
        async function checkItemExists(token, path, name) {
            const fullPath = (path + '/' + name).replace(/\/+/g, '/');
            try {
                const dRes = await fetch(`https://www.call2all.co.il/ym/api/GetIVR2Dir?token=${token}&path=${fullPath}`);
                const dData = await dRes.json();
                if (dData.responseStatus === "OK") return { name, type: "DIR" };
        
                const fRes = await fetch(`https://www.call2all.co.il/ym/api/GetTextFile?token=${token}&what=ivr2:${fullPath}.ini`);
                const fData = await fRes.json();
                if (fData.contents !== undefined) return { name: name + ".ini", type: "FILE" };
            } catch (e) {}
            return null;
        }
        
        async function loadInitialList() {
            const token = document.getElementById('srcToken').value.trim();
            const path = document.getElementById('srcPath').value.trim();
            const digits = parseInt(document.getElementById('digitCount').value) || 2;
            if (!token) { alert("נא להזין טוקן"); return; }
            
            addLog(`מתחיל סריקה: ${path}`, "info");
            const tbody = document.getElementById('fileTableBody');
            tbody.innerHTML = '';
            
            const res = await fetch(`https://www.call2all.co.il/ym/api/GetIVR2Dir?token=${token}&path=${path}`);
            const data = await res.json();
            let foundMap = new Map();
            if (data.files) data.files.forEach(f => foundMap.set(f.name, f));
        
            // 1. סריקת קבצי INI בתיקיית השורש שנבחרה (חדש!)
            for (let ini of INI_FILES) {
                let iniName = ini + ".ini";
                if (!foundMap.has(iniName)) {
                    let found = await checkItemExists(token, path, ini);
                    if (found) foundMap.set(found.name, { name: found.name, fileType: found.type });
                }
            }
        
            // 2. ניחוש שלוחות חבויות
            const max = Math.pow(10, digits);
            for (let i = 0; i < max; i++) {
                let n = i.toString();
                let candidates = new Set([n]);
                for (let d = 1; d <= digits; d++) candidates.add(n.padStart(d, '0'));
        
                for (let cand of candidates) {
                    if (!foundMap.has(cand) && !foundMap.has(cand + ".ini")) {
                        let found = await checkItemExists(token, path, cand);
                        if (found) foundMap.set(found.name, { name: found.name, fileType: found.type });
                    }
                }
                if (i % 10 === 0) updateProgress(Math.round((i/max)*100), "סורק:");
            }
        
            const sorted = Array.from(foundMap.values()).sort((a,b) => a.name.localeCompare(b.name, undefined, {numeric: true}));
            sorted.forEach(f => {
                tbody.insertAdjacentHTML('beforeend', `<tr><td><input type="checkbox" class="file-check" data-name="${f.name}" data-type="${f.fileType}" checked></td><td>${f.fileType === "DIR" ? "שלוחה" : "קובץ"}</td><td>${f.name}</td></tr>`);
            });
        
            document.getElementById('fileArea').style.display = 'block';
            document.getElementById('downloadBtn').disabled = false;
            updateProgress(100, "סריקה הושלמה");
        }
        
        async function processDeep(token, path, name, type, zipFolder) {
            const fullPath = (path + '/' + name).replace(/\/+/g, '/');
            const digits = parseInt(document.getElementById('digitCount').value) || 2;
        
            if (type === "DIR") {
                addLog(`סורק שלוחה: ${fullPath}`, "info");
                const currentFolder = zipFolder.folder(name);
                
                const res = await fetch(`https://www.call2all.co.il/ym/api/GetIVR2Dir?token=${token}&path=${fullPath}`);
                const data = await res.json();
                let children = data.files || [];
                let namesSet = new Set(children.map(c => c.name));
        
                // ניחוש חבויים בתוך השלוחה
                for (let i = 0; i < Math.pow(10, digits); i++) {
                    let n = i.toString();
                    let candidates = new Set([n]);
                    for (let d = 1; d <= digits; d++) candidates.add(n.padStart(d, '0'));
                    for (let cand of candidates) {
                        if (!namesSet.has(cand) && !namesSet.has(cand + ".ini")) {
                            let found = await checkItemExists(token, fullPath, cand);
                            if (found) {
                                children.push({ name: found.name, fileType: found.type });
                                namesSet.add(found.name);
                            }
                        }
                    }
                }
        
                // בדיקת קבצי INI בתוך השלוחה
                for (let ini of INI_FILES) {
                    let iniName = ini + ".ini";
                    if (!namesSet.has(iniName)) {
                        let found = await checkItemExists(token, fullPath, ini);
                        if (found) children.push({ name: found.name, fileType: found.type });
                    }
                }
        
                for (let child of children) {
                    await processDeep(token, fullPath, child.name, child.fileType, currentFolder);
                }
            } else {
                try {
                    const res = await fetch(`https://www.call2all.co.il/ym/api/DownloadFile?token=${token}&path=ivr2:${fullPath}`);
                    const blob = await res.blob();
                    
                    totalBytes += blob.size;
                    const elapsed = (Date.now() - startTime) / 1000 || 1;
                    const speed = (totalBytes / 1024 / elapsed).toFixed(2);
                    document.getElementById('statsBar').innerText = `מהירות: ${speed} KB/s | סה"כ: ${(totalBytes/1024/1024).toFixed(2)} MB`;
                    
                    zipFolder.file(name.endsWith('.ini') ? name + ".txt" : name, blob);
                } catch (e) { addLog(`שגיאה בהורדת ${fullPath}`, "error"); }
            }
        }
        
        async function startDeepDownload() {
            const token = document.getElementById('srcToken').value.trim();
            const basePath = document.getElementById('srcPath').value.trim();
            const selected = Array.from(document.querySelectorAll('.file-check:checked'));
            if (selected.length === 0) return;
        
            let fileHandle;
            try {
                fileHandle = await window.showSaveFilePicker({
                    suggestedName: document.getElementById('fileNameInput').value + ".zip",
                    types: [{ description: 'ZIP file', accept: {'application/zip': ['.zip']} }]
                });
            } catch (e) { return; }
        
            const zip = new JSZip();
            document.getElementById('downloadBtn').disabled = true;
            totalBytes = 0;
            startTime = Date.now();
        
            for (let i = 0; i < selected.length; i++) {
                updateProgress(Math.round((i / selected.length) * 100), "מוריד קבצים...");
                const currentBasePath = basePath === '/' ? '' : basePath;
                await processDeep(token, currentBasePath, selected[i].dataset.name, selected[i].dataset.type, zip);
            }
        
            addLog("סוגר קובץ ZIP...", "success");
            const content = await zip.generateAsync({ type: "blob" });
            const writable = await fileHandle.createWritable();
            await writable.write(content);
            await writable.close();
        
            updateProgress(100, "הושלם!");
            addLog("✅ הגיבוי הסתיים בהצלחה!", "success");
            document.getElementById('downloadBtn').disabled = false;
        }
        
        function toggleAll(source) {
            document.querySelectorAll('.file-check').forEach(cb => cb.checked = source.checked);
        }
        </script>
        </body>
        </html>
        
        א I 2 תגובות תגובה אחרונה תגובה ציטוט 1
        • א מנותק
          אA @אA
          נערך לאחרונה על ידי

          @ivrפון
          העלתי גירסא חדשה ומתוקנת

          R תגובה 1 תגובה אחרונה תגובה ציטוט 0
          • R מנותק
            R.E.T מערכות @אA
            נערך לאחרונה על ידי

            @אA
            מה חדש ונוסף בזה?

            א תגובה 1 תגובה אחרונה תגובה ציטוט 0
            • א מנותק
              אA @R.E.T מערכות
              נערך לאחרונה על ידי

              @R.E.T-מערכות
              הוספתי פירוט מעל הקוד.

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

                אני מעלה תוכנה שיוצרת תוכנות מקבצי html.
                אפשר לקחת את כל קבצי הhtml שבפורום להכניס לתוכנה והיא אורזת אותם לתוכנה ניידת.
                בהצלחה!
                בונה_התוכנות.zip

                תגובה 1 תגובה אחרונה תגובה ציטוט 2
                • I מנותק
                  isi @אA
                  נערך לאחרונה על ידי

                  @אA נראה שזה עובד מצוין.
                  תודה רבה גדולה!!!

                  רק אציין שאת כל קבצי ה INI הוא לא מוריד כקובץ INI אלא כקובץ TXT.

                  למשל את הקובץ EnterIDValName.ini הוא יוריד כשם מלא ויוסיף לו סיומת txt ואז שם הקובץ יראה: EnterIDValName.ini.txt

                  לא נורא, כי אחרי הכל זה לגיבוי.
                  אבל אם זה דבר שניתן לסידור בקלות, אז יכול להיות שכדאי לסדר לעתיד.

                  ושוב, תודה רבה!!!

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

                    @isi
                    ניסית פעם להוריד קובץ ini מהמערכת שלך למחשב?!
                    אני בטוח שלא מכיוון שאז לא היית אומר את זה... 😲 😊
                    הבעיה היא שבה הורדת ini למחשב האנטי וירוס קולט אותם כקובץ מסוכן ולא נותן להוריד.
                    אבל זה גם לא יעזור לך כי בקובץ טקסט תוכל לערוך אותם כמו שצריך, ובקובץ שהבאתי להעלאת המערכת כעץ שלוחות (הפעולה ההפוכה מהורדה למחשב), זה קולט את קובץ הטקסט ומעלה כini.

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

                      @אA מדוע?
                      כשאני מנסה להוריד מהמערכת קובץ INI על ידי לחצן ההורדה הזה:

                      7e18d40a-eb6f-4f5e-9855-25383a2b8726-image.png

                      זה יורד כקובץ INI ללא בעיה.

                      ומבחינת עריכה של הקובץ, אני עושה את זה בתוכנת Notepad. זו תוכנה מעולה לכתיבה של קבצי INI או PHP ואפילו TXT בצורה מאד מסודרת.

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

                        @isi
                        איך הקובץ מוצג?
                        באיזו סוג תוכנה?

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

                          @אA בתוכנת Notepad. זו תוכנה מעולה לכתיבה של קבצי INI או PHP ואפילו TXT בצורה מאד מסודרת.

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

                            @isi
                            טוב, אז אצלי זה יורד כקובץ נתונים ונפתח כפנקס רשימות

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

                              @אA נראה לי שבאמת לפני שהתקנתי Notepad אז קבצי INI היו נפתחים לי אכן בפנקס רשימות, אבל כאמור התוכנה הזו ממליץ להתקין אותה. היא חינמית וקלה, ומאד נוחה לעריכה.

                              תגובה 1 תגובה אחרונה תגובה ציטוט 1
                              • פוסט ראשון
                                פוסט אחרון