Ну, я фанатично нашел решение. Поскольку это только для локального и презентационного использования, я мог обойти некоторые ценные бумаги. По сути, делать то, что мы обычно НЕ делаем на веб-сайте, но все это БЕЗ изменения конфигурации вашего веб-сервера или касания любого файла .htaccess. По сути, никаких ограничений безопасности, просто старый взлом, который не представляет никаких нарушений безопасности для вашего браузера или вашего сервера.
Примечание:
Существуют 2 разных веб-сайта (поэтому 2 разные папки в самых разных местах), 1 для разработки и серьезных выпусков, один для внутренних и / или презентационных целей.
Каждый файл является локальным и внутри папки презентации.
PHP-код не может быть запущен по ссылке "file: ///".
Доступ к базе данных mysql осуществляется через PHP, а сервер находится на Apach24
Локальное чтение видео по ссылке "file: ///" намного быстрее, чем по ссылке http://" 1026 *
Поиск должен быть выполнен в базе данных MySQL из ссылки "http://"", а результаты должны отображаться на веб-странице, открытой по ссылке "file: ///".
Не следует вносить изменения в конфигурацию браузера, поэтому отключение CORS не является решением.
Обход кодов с помощью методов, предложенных многими сайтами, не будет работать из-за соображений безопасности или из-за того, что обход CORS не принимает ссылки "file: ///"
PHP может записывать файлы на сервер, где я решил обойти CORS. Поскольку запросы XML через AJAX могут выполняться в одном и том же домене происхождения, то есть исключительно в javascript. Если существует файл, который не содержит код PHP и находится в том же Domaine I / E "file: ///", содержимое может быть прочитано без каких-либо проблем.
Поэтому я просто делаю следующее в моем файле db.php:
$s_mode = "";
$s_text = "";
$sres = "";
if (isset($_REQUEST["srch"])) {$s_text=$_REQUEST["srch"];}
if (isset($_REQUEST["mode"])) {$s_mode=$_REQUEST["mode"];}
if ($s_mode == "s") {
$sres = SearchDB($s_text);
WriteFile("D:/whatever/my_path/dbres.html",$sres);
}
// Writes the contents of the search in a specified file
function WriteFile($faddress,$fcontents) {
$ifile = fopen($faddress,"w");
fwrite($ifile,$fcontents);
fclose($ifile);
}
Теперь, используя обычный запрос AJAX, я делаю 2 вещи. Я решил использовать iframe со стилем «display: none», чтобы не беспокоиться об открытии другой вкладки.
Выполните фактический запрос, который открывает ссылку "cross-doamin" в iframe, КОТОРЫЙ выполняет мой код db.php. Я в основном открываю "http://127.0.0.1/whatever/db.php?param1=data&parma2=data" внутри моего iframe.
Как только мой поиск будет завершен, и у меня будут результаты, мой db.php сохранит html-файл с результатами, так как он содержится в моем пути к файлу "file: ///" так: "D: / независимо от / my_path / dbres.html».
Я добавил новую функцию в мой servcom.js. Итак, содержимое моего нового файла выглядит так:
// Show page info in another page element or window with parameters (for local use only)
function ServInfoLocal(dest_frame,web_page,params="",form_id="") {
var sparams = params;
var swpage = web_page;
var iweb = document.getElementById(dest_frame);
var moreparams = "";
// If we entered extra parameters including form fields,
// add the the "&" before the form field list
if (sparams != "") {moreparams = "&";}
// Get form field values if a form id is specified
if (form_id != "") {
var efrm = document.getElementById(form_id);
sparams += moreparams+GetDivFields(form_id);
}
// If destination frame does not exist, exit
if (typeof(iweb) == "!undefined" || iweb == null) {return;}
// Add the question mark if there is any parameters to pass
if (sparams != "") {sparams = "?"+sparams;}
// Show results in iframe
iweb.src = swpage+sparams;
}
// AJAX simple HTTP GET request
function ServInfo(pop_field_id,web_page,params="",form_id="",append_data_to_output = "",exec_string = "",dont_show_results = "") {
var sparams = params;
var swpage = web_page;
var eobj = document.getElementById(pop_field_id);
var moreparams = "";
// If we entered extra parameters including form fields,
// add the the "&" before the form field list
if (sparams != "") {moreparams = "&";}
// Get form field values if a form id is specified
if (form_id != "") {
var efrm = document.getElementById(form_id);
sparams += moreparams+GetDivFields(form_id);
}
// If HTML element to populate does not exist, exit
if (typeof(eobj) == "!undefined" || eobj == null) {return;}
if (window.XMLHttpRequest) {
// IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else {
// IE6-
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
// Do not show any results if requested
if (dont_show_results == "") {
if (append_data_to_output == "y") {
document.getElementById(pop_field_id).innerHTML += this.responseText;
}
if (append_data_to_output == "") {
document.getElementById(pop_field_id).innerHTML = this.responseText;
}
}
// Execute a string if a user defined one
if (exec_string != "") {
eval(exec_string);
}
}
};
// Add the question mark if there is any parameters to pass
if (sparams != "") {swpage += "?";}
xmlhttp.open("GET",swpage+sparams,true);
xmlhttp.send();
}
// Build a parameter string with div fields of type text, hidden or password
function GetDivFields(div_id) {
var ediv = document.getElementById(div_id);
var elem = ediv.children;
var retval = "";
var ssep = "";
for (var i = 0; i < elem.length; i++) {
if (elem[i].type == "text" || elem[i].type == "hidden" || elem[i].type == "password") {
retval += ssep+elem[i].name+"="+pURL(elem[i].value);
ssep = "&";
}
if (elem[i].type == "checkbox") {
if (elem[i].checked == true) {
retval += ssep+elem[i].name+"="+elem[i].value;
ssep = "&";
}
}
}
return retval;
}
Теперь мой файл dbres.html будет содержать только элементы div и всю информацию, необходимую для отображения на моей странице "file: ///", с которой пришел поисковый запрос. Так что у меня просто есть это на моей странице:
<div id="search-form" style="color:white;font-weight:bold;">
<input id="srch" name="srch" type="text">
<button class="bbut" onclick="ServInfoLocal('iweb','http://127.0.0.1/whatever/html/db.php','mode=s','search-form');">Search</button>
<button class="bbut" onclick="ServInfo('search-results','dbres.html');">Click here</button>
</div>
<div id="search-results">Results here</div>
<iframe id="iweb" style="display:none;" src=""></iframe>
На данный момент у меня есть 2 кнопки, одна для поиска и одна, чтобы показать результаты из моего недавно созданного файла. Теперь я могу показать свои локальные видео, которые будут загружаться в мой контейнер видео с источником «file: ///» напрямую, без прохождения через http. Я сделаю так, чтобы результаты отображались автоматически, и теперь я смогу делать это сам.
Итак, если кто-то на планете Земля хочет иметь возможность выполнять междоменный поиск в базе данных MySQL из локального файла, запускаемого непосредственно из проводника Windows, на самом деле не так уж много решений, на самом деле я не нашел ни одного, поэтому здесь хотя бы тот, кому понадобится это решение.
Для любопытных, следующим шагом будет зацикливание моей папки, пока мой файл dbres не появится, используя другую функцию js. Как только мой файл будет извлечен, вызовите другой php-файл, который уничтожит созданный файл, и я буду готов к другому запросу базы данных со своей веб-страницы, расположенной в расположении «file: ///».