$line) { $line = trim($line); // Remove trailing comma if present $line = rtrim($line, ','); // Skip empty lines or lines that are SQL comments if (empty($line) || substr($line, 0, 2) === '--' || substr($line, 0, 1) === '#') { echo " Skipping empty or comment line.\n"; continue; // Skip key/constraint definitions } // Check if it's a key or constraint definition if (preg_match('/^(PRIMARY KEY|UNIQUE KEY|KEY|CONSTRAINT|FOREIGN KEY)/i', $line)) { echo " Is Key/Constraint: Yes\n"; continue; // Skip key/constraint definitions } echo " Processing Line [{$index}]: '{$line}'\n"; // Attempt to extract column name from the beginning of the line // A column definition typically starts with a backticked name or a simple name if (preg_match('/^`?(\w+)`?/i', $line, $name_match)) { $col_name = $name_match[1]; echo " Extracted Column Name: '{$col_name}'\n"; $columns[$col_name] = $line; // Store the whole line as the definition $normalized_columns[$col_name] = normalize_column_definition($line); } else { echo " Failed to extract column name from line: '{$line}'\n"; } } echo "--- End Debugging Table: {$table_name} ---\n"; $tables[$table_name] = [ 'create_sql' => $match[0], 'columns' => $columns, 'normalized_columns' => $normalized_columns, ]; } return $tables; } $rebuild_sql_content = file_get_contents('/media/msbfox/SeagateBackup2/remoteproject/rebaseweb/rebuild.sql'); $webdb_sql_content = file_get_contents('/media/msbfox/SeagateBackup2/remoteproject/rebaseweb/webdb.sql'); $rebuild_tables = parse_create_table_sql($rebuild_sql_content); $webdb_tables = parse_create_table_sql($webdb_sql_content); echo "\n--- Rebuild.sql Parsed Tables ---\n"; foreach ($rebuild_tables as $table_name => $table_info) { echo "Table: {$table_name}, Columns: " . count($table_info['columns']) . "\n"; } echo "Total tables parsed from rebuild.sql: " . count($rebuild_tables) . "\n"; echo "\n--- Webdb.sql Parsed Tables ---\n"; foreach ($webdb_tables as $table_name => $table_info) { echo "Table: {$table_name}, Columns: " . count($table_info['columns']) . "\n"; } echo "Total tables parsed from webdb.sql: " . count($webdb_tables) . "\n"; $temp_sql_content = []; foreach ($rebuild_tables as $table_name => $rebuild_table_info) { if (!isset($webdb_tables[$table_name])) { // Table is missing in webdb.sql $temp_sql_content[] = $rebuild_table_info['create_sql']; } else { // Table exists, compare column definitions $webdb_table_info = $webdb_tables[$table_name]; // Compare normalized column definitions. Order matters for CREATE TABLE. // array_values to compare just the definitions, not keys (column names) $rebuild_normalized_cols = array_values($rebuild_table_info['normalized_columns']); $webdb_normalized_cols = array_values($webdb_table_info['normalized_columns']); // Check if the arrays of normalized column definitions are identical // This will check both content and order if ($rebuild_normalized_cols !== $webdb_normalized_cols) { // Columns differ, or their order differs. Recreate the table. $temp_sql_content[] = "DROP TABLE IF EXISTS `{$table_name}`;"; $temp_sql_content[] = $rebuild_table_info['create_sql']; } // If they are identical, do nothing, as the table schema matches rebuild.sql } } file_put_contents('/media/msbfox/SeagateBackup2/remoteproject/rebaseweb/temp.sql', implode("\n\n", $temp_sql_content)); echo "\ntemp.sql 파일이 생성되었습니다.\n"; ?>