Загрузка файлов без ошибок на стороне сервера во время процесса

я постоянно вношу изменения в свое программное обеспечение и загружаю его на сервер. клиенты используют мое онлайн-программное обеспечение все время, если файл PHP частично загружен (скажем, загрузка занимает 3 секунды), когда клиент щелкает ссылку (скажем, на отметке 1 секунда), он получает сообщение об ошибке, потому что файл все еще загружается ...

Parse error: syntax error, unexpected $end in /inc/functions.php on line 475

Поскольку я нахожусь в Австралии, наш интернет... ну... "не очень быстрый" — это хороший способ выразить это

Используются ли какие-либо техники при загрузке файлов, чтобы он не вызывает ошибок у клиентов, использующих программное обеспечение?

Единственное, что я могу сказать, это загружать файлы, скажем, в другой каталог, а затем запускать PHP-скрипт, который очень быстро копирует файлы... Но есть ли решения получше?

ОКОНЧАТЕЛЬНЫЙ КОД

Благодаря приведенному ниже Грегу я смог найти лучший способ сделать что-то. Решил поделиться своим окончательным кодом. Это немного грубо, но помогает... Надеюсь, это кому-то поможет

<?php

// root path
define('ABSPATH', dirname(__FILE__) . '/');

// messages
$GLOBALS['copied'] = array();
$GLOBALS['failed'] = array();
$GLOBALS['folders'] = array();

// you have to submit the form (added security)
if (isset($_POST['copy'])) {

    $GLOBALS['devuploads_folder'] = '_devuploads';

    function find_files($dir) {
        if ($dh = opendir(ABSPATH . $dir)) {
            while (($file = readdir($dh)) !== false) {

                // ignore files
                if ($file === '.' || $file === '..')
                    continue;

                // delete temporary files (optional)
                if ($file == '.DS_Store') {
                    unlink(ABSPATH . $dir . $file);
                    continue;
                }

                // determine paths                  
                $live_path = str_replace($GLOBALS['devuploads_folder'] . '/', '', $dir . $file);                
                $dev_file = $dir . $file;                   
                $live_file = $live_path;
                $dev_file_path = ABSPATH . $dir . $file;                    
                $live_file_path = ABSPATH . $live_path;

                // it's a file
                if (is_file(ABSPATH . $dir . $file)) {  

                    // check if the file has been updated or it's a brand newy
                    $updated_file = $new_file = false;
                    if (file_exists($live_file_path)) {                                 
                        $dev_file_modified = filemtime($dev_file_path);     
                        $live_file_modified = filemtime($live_file_path);                                               
                        if ($dev_file_modified > $live_file_modified)
                            $updated_file = true;                       
                    } else {
                        $new_file = true;
                    }

                    // move the file
                    if ($updated_file || $new_file) {
                        if (copy($dev_file_path, $dev_file_path . '.bak')) {
                            if (rename($dev_file_path . '.bak', $live_file_path))
                                if ($new_file)
                                    $GLOBALS['copied'][] = '<strong>New File:</strong> ' . $dev_file . ' moved to ' . $live_file;   
                                else
                                    $GLOBALS['copied'][] = $dev_file . ' moved to ' . $live_file;   
                            else
                                $GLOBALS['failed'][] = '<strong>Rename failed:</strong> ' . $dev_file . ' to ' . $live_file;
                        } else {
                            $GLOBALS['failed'][] = '<strong>Copy failed:</strong> ' . $dev_file . ' to ' . $dev_file . '.bak';
                        }
                    }

                // it's a folder
                } else if (is_dir(ABSPATH . $dir . $file)) {

                    // create new folder if it doesn't exist
                    if (!is_dir($live_file_path)) {
                        $GLOBALS['folders'][] = '<strong>Created:</strong> ' . $live_file;  
                        mkdir($live_file_path, 0755);   
                    }

                    // keep digging
                    find_files($dir . $file . '/');

                }

            }
            closedir($dh);
        }
    }

    find_files($GLOBALS['devuploads_folder'] . '/');

}

?>
<!DOCTYPE HTML>
<html>
<head>
    <title>Copy Changes</title>
    <style type="text/css">
    h1 {
        font: normal 20px Arial, Helvetica, sans-serif;
        line-height: 24px;
        }
    p, li {
        font: normal 14px Arial, Helvetica, sans-serif;
        line-height: 20px;
        }
    </style>
</head> 
<body>

<?php   
if (!empty($GLOBALS['failed'])) {
    echo '<h1>Errors</h1>';
    echo '<ul>';
    foreach($GLOBALS['failed'] AS $message) {
        echo '<li>' . $message . '</li>';
    }
    echo '</ul>';
}

if (!empty($GLOBALS['folders'])) {
    echo '<h1>New Folders</h1>';
    echo '<ul>';
    foreach($GLOBALS['folders'] AS $message) {
        echo '<li>' . $message . '</li>';
    }
    echo '</ul>';
}

if (!empty($GLOBALS['copied'])) {
    echo '<h1>Copied</h1>';
    echo '<ul>';
    foreach($GLOBALS['copied'] AS $message) {
        echo '<li>' . $message . '</li>';
    }
    echo '</ul>';
}

if (empty($GLOBALS['failed']) && empty($GLOBALS['folders']) && empty($GLOBALS['copied']))
    echo '<p>No updates made.</p>';
?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="hidden" name="copy" value="1" />
<p><input type="submit" value="Copy Files" /></p>
</form>

</body>
</html>
6
задан Ben Sinclair 1 June 2012 в 05:39
поделиться