Files
multiphp/test_php_ini.js

89 lines
2.6 KiB
JavaScript

const fs = require('fs');
const path = require('path');
function mockToggleExtension(iniContent, extName, enabled) {
const lines = iniContent.split(/\r?\n/);
let found = false;
const newLines = lines.map(line => {
const trimmedLine = line.trim();
const pattern = new RegExp(`^\\s*;?\\s*extension\\s*=\\s*(?:php_)?${extName}(?:\\.dll)?\\s*$`, 'i');
if (pattern.test(trimmedLine)) {
found = true;
return enabled ? `extension=php_${extName}.dll` : `;extension=php_${extName}.dll`;
}
return line;
});
if (!found && enabled) {
const extSectionIndex = newLines.findIndex(l => l.trim().toLowerCase() === '; dynamic extensions');
if (extSectionIndex !== -1) {
newLines.splice(extSectionIndex + 1, 0, `extension=php_${extName}.dll`);
} else {
newLines.push(`extension=php_${extName}.dll`);
}
}
let extDirSet = false;
const finalLines = newLines.map(line => {
if (line.trim().startsWith('extension_dir') || line.trim().startsWith(';extension_dir')) {
extDirSet = true;
return 'extension_dir = "ext"';
}
return line;
});
if (!extDirSet) {
finalLines.unshift('extension_dir = "ext"');
}
return finalLines.join('\n');
}
// Test cases
const testIni = `
[PHP]
; extension_dir = "./"
; Dynamic Extensions
;extension=php_bz2.dll
extension=php_curl.dll
;extension=php_mysql.dll
`;
console.log("--- Initial ---");
console.log(testIni);
console.log("\n--- Enable mysql ---");
let updated = mockToggleExtension(testIni, 'mysql', true);
console.log(updated);
if (updated.includes('extension=php_mysql.dll') && !updated.includes(';extension=php_mysql.dll')) {
console.log("SUCCESS: mysql enabled");
} else {
console.log("FAIL: mysql not enabled properly");
}
console.log("\n--- Disable curl ---");
updated = mockToggleExtension(updated, 'curl', false);
console.log(updated);
if (updated.includes(';extension=php_curl.dll')) {
console.log("SUCCESS: curl disabled");
} else {
console.log("FAIL: curl not disabled properly");
}
console.log("\n--- Check extension_dir ---");
if (updated.includes('extension_dir = "ext"')) {
console.log("SUCCESS: extension_dir set correctly");
} else {
console.log("FAIL: extension_dir not set properly");
}
console.log("\n--- Add new extension (mbstring) ---");
updated = mockToggleExtension(updated, 'mbstring', true);
console.log(updated);
if (updated.includes('extension=php_mbstring.dll')) {
console.log("SUCCESS: mbstring added");
} else {
console.log("FAIL: mbstring not added");
}