Ciągle wprowadzam poprawki do mojego oprogramowania i przesyłam je na serwer. Ponieważ klienci ciągle korzystają z mojego oprogramowania online, jeśli plik PHP jest częściowo przesłany (załóżmy, że trwa to 3 sekundy, aby przesłać), gdy klient kliknie łącze (powiedzmy na 1 sekundę), pojawia się błąd, ponieważ plik nadal ładuje ...Przesyłanie plików bez powodowania błędów po stronie serwera podczas procesu
Parse error: syntax error, unexpected $end in /inc/functions.php on line 475
Jak już jestem w Australii, nasz internet ... cóż ... "nie jest bardzo szybki" to dobry sposób na jego wprowadzenie.
Czy są jakieś techniki stosowane podczas przesyłania plików, aby nie powodowały błędów dla klientów korzystających z oprogramowania?
Jedyne, co mogę zrobić to ładowanie plików, aby powiedzieć inny katalog, a następnie uruchomienie skryptu PHP, który kopiuje pliki przez super szybki ... Ale czy istnieją lepsze rozwiązania?
KOD FINAL
Dzięki Greg poniżej udało mi się dowiedzieć, że najlepszym sposobem, aby robić różne rzeczy. Pomyślałem, że podzielę się moim ostatnim kodem. To trochę szorstki, ale załatwia sprawę ... Mam nadzieję, że to pomoże ktoś
<?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>
ten błąd jest zwykle spowodowany przez niedokończoną funkcję. Sprawdź, czy masz niepełną parę '{' i '}' – ariefbayu
@silent Powodem, dla którego ma niedokończoną funkcję, jest to, że plik jest częściowo przesłany, jak określono w moim pytaniu ... Nie ma nic złego w tym kodzie. –
OK, tęsknię rozumiałem pytanie. Ja jednak, przez przesyłanie, użytkownik przesyła pliki. Nie kod źródłowy. – ariefbayu