Copier-coller le contenu ci-après dans un fichier que vous nommerez wamp-portable.bat
@ECHO OFF SETLOCAL EnableDelayedExpansion :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: :: Wamp Portable :: :: :: :: A DOS Batch script to make WampServer portable. :: :: :: :: Copyright (C) 2012-2013 Cr@zy <webmaster@crazyws.fr> :: :: :: :: Wamp-Portable is free software; you can redistribute it and/or modify :: :: it under the terms of the GNU Lesser General Public License as published by :: :: the Free Software Foundation, either version 3 of the License, or :: :: (at your option) any later version. :: :: :: :: Wamp-Portable is distributed in the hope that it will be useful, :: :: but WITHOUT ANY WARRANTY; without even the implied warranty of :: :: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the :: :: GNU Lesser General Public License for more details. :: :: :: :: You should have received a copy of the GNU Lesser General Public License :: :: along with this program. If not, see http://www.gnu.org/licenses/. :: :: :: :: Related post: http://goo.gl/g0rWG :: :: Usage: Just launch wamp-portable.bat in the same folder as wampmanager.exe :: :: :: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: CLS TITLE Wamp Portable v1.6 ECHO. ECHO. ECHO ######################################################################### ECHO # # ECHO # @ @ @@@@@ @ @ @@@@@ @@@@@ @@@@@ @@@@@ @@@@@ @@@@@ @ @@@@@ # ECHO # @ @ @ @ @@ @@ @ @ @ @ @ @ @ @ @ @ @ @ @ # ECHO # @ @ @@@@@ @ @ @ @@@@@ @ @ @@@@@ @ @@@@@ @@@@@ @ @@@@ # ECHO # @@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # ECHO # @ @ @ @ @ @ @ @@@@@ @ @ @ @ @ @@@@@ @@@@@ @@@@@ # ECHO # # ECHO # Author : Cr@zy Date : 09/25/2013 # ECHO # Email : webmaster@crazyws.fr Version : 1.6 # ECHO # # ECHO ######################################################################### :: Wamp launcher SET wampLauncher=%TEMP%\wampLauncher.vbs SET wampLauncherScript=%TEMP%\wampLauncher.bat SET wampmanagerDaemon=%~dp0wampmanager.exe :: Get the latest version of PHP on Wamp FOR /R bin\php %%v IN (php.*exe) DO ( SET PHP=%%v ) :: Run PHP %PHP% -n -d output_buffering=1 -f "%~f0" ENDLOCAL EXIT /b :: wampserver-portable PHP script = 1) { echoListener(logTitle($str . " " . $dots . " " . ($status ? "OK" : ($customError === false ? "KO" : $customError)))); if (!empty($values) && is_array($values)) { foreach ($values as $key => $value) { $count = strlen($key); $spaces = ""; for ($i=$count; $i<=7; $i++) { $spaces .= " "; } echoListener("\n" . ($withKey ? $key : "") . ($withKey && $withValue ? $spaces . " : " : "") . ($withValue ? $value : "")); } } } else { echoListener("\n" . $str . " " . $dots . " " . ($status ? "OK" : ($customError === false ? "KO" : $customError))); } if (!$status && $customError === false) { exitApp(); } } function logTitle($title) { $logTitle = "\n\n\n\n======================================================================\n"; $logTitle .= $title; $logTitle .= "\n======================================================================"; return $logTitle; } function execCommand($cmds, $echoStdout=true) { global $verbose, $tmpStdout; $logs = array(); $cmds = is_array($cmds) ? $cmds : array($cmds); $stdout = " >\"" . $tmpStdout . "\" 2>&1"; foreach($cmds as $cmd) { $log = ""; if ($verbose >= 1) echoListener("\n> " . $cmd); `$cmd$stdout`; if (file_exists($tmpStdout)) { $lines = file($tmpStdout, FILE_IGNORE_NEW_LINES); foreach ($lines as $line) { $line = trim($line); if (!empty($line)) { $log .= $line . "\n"; if ($verbose == 2 && $echoStdout) { echoListener("\n" . $line); } } } if (!empty($log)) { $logs[] = $log; } @unlink($tmpStdout); } } return $logs; } function versionsAppList($dir, $substr, $bins) { $appArr = array(); if (is_dir($dir) && $appDirHandle = opendir($dir)) { while (false !== ($appDirName = readdir($appDirHandle))) { $appPath = getcwd() . "\\" . str_replace("/", "\\", $dir) . "\\" . $appDirName; if ($appDirName != '.' && $appDirName != '..' && is_dir($appPath) ) { $appVersion = substr($appDirName, $substr); foreach ($bins as $bin) { $appBin = str_replace("/", "\\", $bin); if (is_file($appPath . '\\' . $appBin)) { $appArr[$appVersion] = array( 'path' => $appPath, 'bin' => $appBin ); } } } } ksort($appArr, SORT_NUMERIC); } return $appArr; } function versionsAppPaths($list, $type) { $paths = array(); foreach ($list as $versions => $value) { if (count(array_keys($paths, $type . ';' . $value['path'])) == 0) { $paths[] = $type . ';' . $value['path']; } } return $paths; } function foundFiles($path, $toFound) { $files = array(); if ($handle = opendir($path)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != ".." && is_file($path . '\\' . $file)) { foreach($toFound as $elt) { if (endWith($file, $elt) || empty($elt)) { $files[] = $path . '\\' . $file; } } } elseif ($file != "." && $file != ".." && is_dir($path . '\\' . $file)) { $tmpFiles = foundFiles($path . '\\' . $file, $toFound); foreach($tmpFiles as $tmpFile) { $files[] = $tmpFile; } } } } return $files; } function writeToFile($file, $string) { $handle = fopen($file, 'w'); fwrite($handle, $string); fclose($handle); } function getAltPath($path) { $pathAlt[] = ucfirst($path); $pathAlt[] = str_replace('/', '\\', ucfirst($path)); $pathAlt[] = lcfirst($path); $pathAlt[] = str_replace('/', '\\', lcfirst($path)); return $pathAlt; } function replaceWithNewPath($oldPath, $newPath, $filePath) { $fileContent = file_get_contents($filePath); $oldPathAlt = getAltPath($oldPath); $newPathAlt = getAltPath($newPath); $count = 0; foreach($oldPathAlt as $key => $rpcPath) { if (preg_match("#" . str_replace('\\', '\\\\', $rpcPath) . "#", $fileContent)) { if ($key == 0 || $key == 2) { $fileContent = str_replace($rpcPath, $newPathAlt[0], $fileContent, $countRpc); $count += $countRpc; } else { $fileContent = str_replace($rpcPath, $newPathAlt[1], $fileContent); $count += $countRpc; } } } writeToFile($filePath, $fileContent); return $count; } function deleteFolder($folderpath) { if (is_dir($folderpath)) { $dir_handle = opendir($folderpath); } if (!$dir_handle) { return false; } while ($file = readdir( $dir_handle )) { if ($file != '.' && $file != '..') { if (!is_dir($folderpath . '/' . $file)) { unlink($folderpath . '/' . $file); } else { deleteFolder($folderpath . '/' . $file); } } } closedir($dir_handle); rmdir($folderpath); return true; } function get_extension($file) { if (is_file($file) && preg_match('/^[^\x00]+\.([a-z0-9]+)$/i', $file, $matchResult)) { return strtolower($matchResult[1]); } } //////////////////////////////////////////////// // Start process //////////////////////////////////////////////// // Get wamp config $wampConfig = parse_ini_file($wampConfigPath, true); logInfo("Parse wampmanager.conf", isset($wampConfig['main']['installDir'])); // Get oldPath and newPath $oldPath = $wampConfig['main']['installDir']; $newPath = str_replace('\\', '/', getcwd()); logInfo("Paths", !empty($oldPath) && !empty($newPath), array( "oldPath" => $oldPath, "newPath" => $newPath, )); // Get php versions list $phpArr = versionsAppList("bin/php", 3, array("php.exe")); logInfo("PHP versions", !empty($phpArr), $phpArr, true, false); // Get apache versions list $apacheArr = versionsAppList("bin/apache", 6, array("bin/apache.exe", "bin/httpd.exe")); logInfo("Apache versions", !empty($apacheArr), $apacheArr, true, false); // Get mysql versions list $mysqlArr = versionsAppList("bin/mysql", 5, array("bin/mysqld.exe", "bin/mysqld-nt.exe")); logInfo("MySQL versions", !empty($mysqlArr), $mysqlArr, true, false); // Get mariadb versions list $mariadbArr = versionsAppList("bin/mariadb", 7, array("bin/mysqld.exe", "bin/mysqld-nt.exe")); logInfo("MariaDB versions", !empty($mariadbArr), $mariadbArr, true, false, 'NOT FOUND'); // Stop wampmanager logInfo("Stop wampmanager", true); $logsStopWampmanager = execCommand("TASKLIST /FI \"IMAGENAME eq wampmanager.exe\" /FO LIST | find \"wampmanager.exe\""); if (!empty($logsStopWampmanager)) { execCommand("TASKKILL /IM wampmanager.exe /F"); execCommand("TIMEOUT /T 3 /NOBREAK", false); } elseif ($verbose == 2) { echoListener("\nNot launched."); } // Stop wampapache service logInfo("Stop wampapache service", true); execCommand("NET STOP wampapache"); // Uninstall wampapache service logInfo("Uninstall wampapache service", true); $apachePath = end($apacheArr); $apachePath = $apachePath['path'] . '\\' . $apachePath['bin']; $apacheScript = $apachePath . " -k uninstall -n wampapache"; execCommand(array($apacheScript, "SC delete wampapache")); // Stop wampmysqld service logInfo("Stop wampmysqld service", true); execCommand("NET STOP wampmysqld"); // Uninstall wampmysqld service logInfo("Uninstall wampmysqld service", true); $mysqlPath = end($mysqlArr); $mysqlPath = $mysqlPath['path'] . '\\' . $mysqlPath['bin']; $mysqlScript = $mysqlPath . " --remove wampmysqld"; execCommand(array($mysqlScript, "SC delete wampmysqld")); // Stop wampmariadb service logInfo("Stop wampmariadb service", true); execCommand("NET STOP wampmariadb"); // Uninstall wampmariadb service if (!empty($mariadbArr)) { logInfo("Uninstall wampmariadb service", true); $mariadbPath = end($mariadbArr); $mariadbPath = $mariadbPath['path'] . '\\' . $mariadbPath['bin']; $mariadbScript = $mariadbPath . " --remove wampmariadb"; execCommand(array($mariadbScript, "SC delete wampmariadb")); } // First launch ? if (!is_dir($rootBackupPath)) { $backupsPath = $rootBackupPath . "#original"; } // Create backups directory if (!is_dir($backupsPath)) { mkdir($backupsPath, null, true); } logInfo("Create backups directory", is_dir($backupsPath)); // Get files to scan $eltToScan = array( 'alias' => array(''), 'apache' => array('.ini', '.conf'), 'mysql' => array('my.ini'), 'php' => array('.ini'), ); $pathsToScan = array(); foreach ($eltToScan as $type => $elt) { if ($type == 'alias') { $pathsToScan[] = $type . ';' . getcwd() . '\\alias'; } elseif ($type == 'apache') { $versionsAppPaths = versionsAppPaths($apacheArr, $type); foreach ($versionsAppPaths as $value) { $pathsToScan[] = $value; } } elseif ($type == 'mysql') { $versionsAppPaths = versionsAppPaths($mysqlArr, $type); foreach ($versionsAppPaths as $value) { $pathsToScan[] = $value; } } elseif ($type == 'mariadb' && !empty($mariadbArr)) { $versionsAppPaths = versionsAppPaths($mariadbArr, $type); foreach ($versionsAppPaths as $value) { $pathsToScan[] = $value; } } elseif ($type == 'php') { $versionsAppPaths = versionsAppPaths($phpArr, $type); foreach ($versionsAppPaths as $value) { $pathsToScan[] = $value; } } } $filesToScan[] = $wampConfigPath; $filesToScan[] = $wampTplPath; $filesToScan[] = $wampIniPath; foreach ($pathsToScan as $elt) { $path = explode(";", $elt); $type = $path[0]; $path = $path[1]; $foundFiles = foundFiles($path, $eltToScan[$type]); foreach ($foundFiles as $value) { $filesToScan[] = $value; } } logInfo("Files to scan", count($filesToScan) > 2, $filesToScan, false); // Backup files before edit $backupFiles = array(); foreach ($filesToScan as $file) { $infofile = pathinfo($file); $backupFileFolder = $backupsPath . str_replace(str_replace('/', '\\', $newPath), '', $infofile['dirname']); $backupFile = $backupFileFolder . "\\" . $infofile['basename']; if (!is_dir($backupFileFolder)) { mkdir($backupFileFolder, null, true); } if (copy($file, $backupFile)) { $backupFiles[] = $backupFile; } } logInfo("Backup files", count($backupFiles) > 2, $backupFiles, false); // Replace old path in files $rpcFiles = array(); foreach ($filesToScan as $file) { $echoStr = $file; $dots = ""; for ($i=strlen($echoStr); $i<=90; $i++) $dots .= "."; $countRpc = replaceWithNewPath($oldPath, $newPath, $file); $rpcFiles[] = $echoStr . " " . $dots . " " . ($countRpc > 0 ? $countRpc . " found" : "none"); } logInfo("Replace old path in files", count($rpcFiles) > 2, $rpcFiles, false); // Purge logs if ($purgeWampLogs) { $purgeLogs = array(); if (is_dir($wampLogsPath)) { $dir_handle = opendir($wampLogsPath); if ($dir_handle) { while ($file = readdir( $dir_handle )) { $ext = get_extension($wampLogsPath . $file); if ($file != '.' && $file != '..' && $ext == 'log') { $purgeLogs[] = $wampLogsPath . $file; @unlink($wampLogsPath . $file); } } closedir($dir_handle); } } logInfo("Purge logs", true, $purgeLogs, false); } // Install wampmysqld service $mysqlVersion = $wampConfig['mysql']['mysqlVersion']; $mysqlVersion = str_replace('"', '', $mysqlVersion); $mysqlPath = $mysqlArr[$mysqlVersion]['path'] . '\\' . $mysqlArr[$mysqlVersion]['bin']; $mysqlInstallParams = $wampConfig['mysql']['mysqlServiceInstallParams']; $mysqlInstallParams = str_replace('"', '', $mysqlInstallParams); $mysqlService = $mysqlPath . " " . $mysqlInstallParams; logInfo("Install wampmysqld service", true); execCommand($mysqlService); execCommand("TIMEOUT /T 1 /NOBREAK", false); execCommand("NET START wampmysqld"); if (!empty($mariadbArr)) { // Install wampmariadb service $mariadbVersion = $wampConfig['mariadb']['mariadbVersion']; $mariadbVersion = str_replace('"', '', $mariadbVersion); $mariadbPath = $mariadbArr[$mariadbVersion]['path'] . '\\' . $mariadbArr[$mariadbVersion]['bin']; $mariadbInstallParams = $wampConfig['mariadb']['mariadbServiceInstallParams']; $mariadbInstallParams = str_replace('"', '', $mariadbInstallParams); $mariadbService = $mariadbPath . " " . $mariadbInstallParams; logInfo("Install wampmariadb service", true); execCommand($mariadbService); execCommand("TIMEOUT /T 1 /NOBREAK", false); execCommand("NET START wampmariadb"); } // Install wampapache service $apacheVersion = $wampConfig['apache']['apacheVersion']; $apacheVersion = str_replace('"', '', $apacheVersion); $apachePath = $apacheArr[$apacheVersion]['path'] . '\\' . $apacheArr[$apacheVersion]['bin']; $apacheInstallParams = $wampConfig['apache']['apacheServiceInstallParams']; $apacheInstallParams = str_replace('"', '', $apacheInstallParams); $apacheService = $apachePath . " " . $apacheInstallParams; logInfo("Install wampapache service", true); execCommand($apacheService); execCommand("TIMEOUT /T 1 /NOBREAK", false); execCommand("NET START wampapache"); // Delete old backups if ($maxBackups > 0) { $listBackups = array(); if ($handle = opendir($rootBackupPath)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != ".." && is_dir($rootBackupPath . $file) && is_numeric($file)) { $listBackups[] = $rootBackupPath . $file; } } } if (!empty($listBackups) && count($listBackups) > $maxBackups) { sort($listBackups); $toDelete = count($listBackups) - $maxBackups; $listBackupsDelete = array(); for ($i=0; $i<$toDelete; $i++) { $listBackupsDelete[] = $listBackups[$i]; deleteFolder($listBackups[$i]); } logInfo("Delete old backups", count($listBackupsDelete) > 0, $listBackupsDelete, false); } } // Now ready to use echoListener("\n\n"); echoListener("Operation completed successfully!\nWamp is now ready to use!"); echoListener("\n\n"); if (!$autoLaunch) { echoListener("Press any key to launch Wamp..."); `pause`; } // Launch wampmanager echoListener("\n\nLaunch wampmanager\n\n"); `ECHO set args = WScript.Arguments >%wampLauncher%`; `ECHO num = args.Count >>%wampLauncher%`; `ECHO. >>%wampLauncher%`; `ECHO if num = 0 then >>%wampLauncher%`; `ECHO WScript.Quit 1 >>%wampLauncher%`; `ECHO end if >>%wampLauncher%`; `ECHO. >>%wampLauncher%`; `ECHO sargs = "" >>%wampLauncher%`; `ECHO if num ^> 1 then >>%wampLauncher%`; `ECHO sargs = " " >>%wampLauncher%`; `ECHO for k = 1 to num - 1 >>%wampLauncher%`; `ECHO anArg = args.Item(k) >>%wampLauncher%`; `ECHO sargs = sargs ^& anArg ^& " " >>%wampLauncher%`; `ECHO next >>%wampLauncher%`; `ECHO end if >>%wampLauncher%`; `ECHO. >>%wampLauncher%`; `ECHO Set WshShell = WScript.CreateObject("WScript.Shell") >>%wampLauncher%`; `ECHO. >>%wampLauncher%`; `ECHO WshShell.Run """" ^& WScript.Arguments(0) ^& """" ^& sargs, 0, False >>%wampLauncher%`; `ECHO @ECHO OFF>%wampLauncherScript%`; `ECHO SETLOCAL EnableDelayedExpansion>>%wampLauncherScript%`; `ECHO.>>%wampLauncherScript%`; `ECHO start /w %wampmanagerDaemon%>>%wampLauncherScript%`; `ECHO.>>%wampLauncherScript%`; `ECHO NET STOP wampapache>>%wampLauncherScript%`; `ECHO $apacheScript>>%wampLauncherScript%`; `ECHO TIMEOUT /T 4 /NOBREAK>>%wampLauncherScript%`; `ECHO SC delete wampapache>>%wampLauncherScript%`; `ECHO.>>%wampLauncherScript%`; `ECHO NET STOP wampmysqld>>%wampLauncherScript%`; `ECHO $mysqlScript>>%wampLauncherScript%`; `ECHO TIMEOUT /T 4 /NOBREAK>>%wampLauncherScript%`; `ECHO SC delete wampmysqld>>%wampLauncherScript%`; `ECHO.>>%wampLauncherScript%`; `ECHO ENDLOCAL>>%wampLauncherScript%`; `wscript.exe %wampLauncher% %wampLauncherScript%`; if ($enableLogs) file_put_contents($logsPath, "@@@\n@@@ END WAMP-PORTABLE " . date('YmdHis') . "\n@@@\n\n\n\n\n\n\n\n\n\n\n\n", FILE_APPEND); ?>