continue;
}
- $cmd = "$mysql_cmd -f < " . escapeshellarg($fn) ;
+ $cmd = "$mysql_cmd -f < " . escapeshellarg($fn) ." 2>&1" ;
echo basename($dir).'/'. basename($fn) . '::' . $cmd. ($this->cli ? "\n" : "<BR>\n");
- passthru($cmd);
+
+ $fp = popen($cmd, "r");
+ while(!feof($fp))
+ {
+ // send the current file part to the browser
+ $line = trim(fgets($fp, 1024));
+ if (empty($line)) {
+ continue;
+ }
+ $matches = array();
+ if (!preg_match('/^ERROR\s+([0-9]+)/', $line, $matches)) {
+ echo " ---- {$line}\n"; flush();
+ continue;
+ }
+ $continue =0;
+ switch($matches[1]) {
+ case 1017: // cause by renaming table -- old one does not exist..
+ case 1050: // create tables triggers this..
+ case 1060: // Duplicate column name
+ case 1061: // Duplicate key name - triggered by add index.. but could hide error. - unlikely though.
+ case 1091: // drop index -- name does not exist.. might hide errors..
+
+ case 1146: // drop a index on an unknown table.. - happens rarely...
+ case 1054: // Unknown column -- triggered by CHANGE COLUMN - but may hide other errrors..
+ $continue = 1;
+ break;
+
+ }
+ if ($continue) {
+ echo " ---- {$line}\n"; flush();
+ continue;
+ }
+ // real errors...
+ // 1051: // Unknown table -- normally drop = add iff exists..
+ echo "File: $fn\n$line\n";
+ exit;
+
+
+ }
+
}