Цитата:
|
Цитата:
Во-первых - если файл закрыт для прямого доступа, то не сможет никакой ajax-запрос достучаться до него, возврат будет 404. Этот файл будет доступен только владельцу - php-сценарию выполняющемуся от имени владельца. Во-вторых вы не ответили на вопросы - откуда берется на этой странице GET["name"] если ajax-запрос не передает такого параметра? Абстрагируйтесь от кода серверного и клиентского, просто описать словами задачу выполняющую этими скриптами можете? |
давате я напишу что я хотела в начале сделать.
Я хотела сделать чтобы данный php код загружался после полной загрузки страницы. Вот сам пхп код (хотела впихнуть в one.php). <? $projectx = "http://".$project.""; function isSiteAvailable($projectx) { // проверка на валидность представленного url if(!filter_var($projectx, FILTER_VALIDATE_URL)) { return 'error'; } // создаём curl подключение $cl = curl_init($projectx); curl_setopt($cl,CURLOPT_CONNECTTIMEOUT,10); curl_setopt($cl,CURLOPT_HEADER,true); curl_setopt($cl,CURLOPT_NOBODY,true); curl_setopt($cl,CURLOPT_RETURNTRANSFER,true); // получаем ответ $response = curl_exec($cl); curl_close($cl); $project = preg_replace("/[^a-zа-я0-9-.]+/is","",$_GET["name"]); if ($response){ return '<img style="vertical-align:-5px;" src="/images/online.png"></img> <font color="#0dd82e">Работает</font>'; }else{ if(file_exists('../../images/screens/'.$project.'.png')) unlink('../../images/screens/'.$project.'.png'); $r=mysql_query("update `ca` set `type`='0' where `link`='".$project."'"); return '<img style="vertical-align:-5px;" src="/images/offline.png"></img> <font color="red">Не работает</font>'; }} if(isset($projectx)){ $response = isSiteAvailable($projectx); $message = ''.$response.''; } if (isset($message)) echo $message; ?> Может я не том путём пошла? Как тогда такое чудо сделать? |
Этот код не поясняет откуда берется злополучный $_GET["name"], а тем более того, что вообще вы хотите сделать. Ну есть cURL запрос к ресурсу, это понятно, но как это связано с $_GET["name"] и с остальным, загадка.
У вас есть локальный сервер для отладки? Загрузите в него два скрипта: a.php <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script> $(function() { var o = $('#box').click(function() { var p = o.data('p') ^ 1; //инвертируем значение переключателя o.data({p: p}); //в зависимости от значения переключателя будет передавать или нет get-параметр в запросе o.load('b.php' + (p ? '?name=var_name' : '')) }).data({p: 1}) //определим переключатель }); </script> <div id="box" style="padding:20px;border:1px solid #444;"></div> b.php <?php //если запрос содержит get-параметр, то возвращаем его, иначе сообщаем, что его не было exit($_GET['name'] ?: 'Not name') ?> Запустите файл a.php и щелкайте по DIV, можете следить за запросом и в отладчике. Как видите сервер будет возвращать $_GET['name'] или же сообщать что его не было с каждым щелчком по DIV. То есть, даже если бы вместо $_GET['name'] ?: 'Not name' был наворочен невероятный по сложности код обработки $_GET['name'], он бы ничего не делал, если такового параметра нет. Вот тоже самое и у вас в коде содержащем ajax-запрос - вы ожидаете "манны небесной" совсем не имея на то оснований, ибо никакого параметра 'name' в запросе к серверу по этому URL у вас нет. Это понятно? Теперь пусть у нас будет еще третий игрок - файл c.php, который до файла a.php делает запрос также к странице b.php, но с передачей этого параметра - 'name'. Мы знаем, что значение этого параметра хочет получить и файл a.php, поэтому запомним его в сессии. Теперь код скрипта a.php будет таким: <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script> $(function() { $('#box').load('b.php') }); </script> <div id="box"></div> то есть просто подгружаем страницу b.php, код которой теперь будет таким: <?php session_start(); if(!$_SESSION['mem']) $_SESSION['mem'] = $_GET['name']; exit($_SESSION['mem']) ?> которая перед тем как будет запрошена страницей a.php сперва должна быть запрошена старницей c.php с таким кодом: <a href="b.php?name=send_name">Send name</a> Теперь загрузив эти три файла вызовите сначала файл c.php и перейдите в нем по ссылке. Это передаст в url get-параметр. В файле b.php значение этого параметра будет запомнено в сессии. После этого запросите файл a.php. Теперь этот файл получит запомненный get-параметр переданный ранее другим сценарием. Иначе никак, нельзя из ничего получить что-то, ну это же элементарно, Ватсон. :) А вот что вы пытаетесь сделать, я так и не понял. И дополнение - если некий скрипт, к которому нужно обратиться клиенту, закрыт от прямого доступа, то клиент должен обращаться не к нему, а к скрипту имеющему к нему доступ, дабы его подключить, исполнить и вернуть результат клиенту. |
а как вставить вместо var_name имеющее значение GET?
|
Цитата:
Например, чтобы у вас в файле представленном выше, был обработан этот запрос $project = preg_replace("/[^a-zа-я0-9-.]+/is","",$_GET["name"]); то некто должен обратиться к этому файлу с этим запросом. Так ли у вас это работает я и пытался выяснить, но увы, пояснений нет. ) А это может быть просто параметр в ссылке тега А, а это может быть и поле ввода формы с именем "name", кторая передается методом GET на страницу, и т.п... Механизм я показал, что собственно можно было и не делать, ибо все просто. Поясните в конце концов просто словами - есть страница А, на которой нужно получить то-то и то-то, причем она может получать некий параметр "name" (от кого?), Есть страница Б, которая может также обращаться к этой странице, если был параметр "name", то получить его. То есть типа такого, что собственно я и описывал. Может быть поясняя на словах и ответ "самой себе" будет сразу из этого и получен? :) |
Ну вроде получилось передать гет.
вот готовый $(function() { var o = $('#box').click(function() { var p = o.data('p') ^ 1; //инвертируем значение переключателя var csstop = "<?php echo $project;?>"; o.data({p: p}); //в зависимости от значения переключателя будет передавать или нет get-параметр в запросе o.load('/inc/info/one.php' + (p ? '?name='+ csstop +'' : '')) }).data({p: 1}) //определим переключатель }); Не могли бы пожалуйста чтобы не по клику открывалось, а как я писала в виде $(window).load(function() { var a = "<?php echo $project; ?>"; setTimeout(function(){ $('#loader').hide(); $('#cc').load('/inc/info/one.php'); }, 1000); }); |
:D
И зачем вы берет код, который я написал ради пояснения "есть/нет параметра запроса" берет себе как рабочий? Поясняю детально его: var o = $('#box') //в переменной "o" кешируем объект #box, так как мы к нему будет не раз обращаться .click(function() { //устнавливем обработку щелчка по объекту #box var p = o.data('p') ^ 1; //получаем значение переключателя "p" и изменяем его бит - 0 будет меняться на 1, и наоборот - 1 меняться на 0 var csstop = "<?php echo $project;?>"; //это ваше не понятно почему здесь взялось, и что есть "плохо" o.data({p: p}); //запоминаем изменение бита "p" //запрашиваем сервер и, если, "p" равно 1, то подставляем в запрос get-параметр, иначе запрос будет без него //то есть get-параметр будет передаваться на сервере черз один раз o.load('/inc/info/one.php' + (p ? '?name='+ csstop +'' : '')) }) .data({p: 1}) //определим бит переключателя определяющего передачу get-параметра, который будет храниться в объекте #box То есть этот код работает как триггер - есть на выходе сигнал, нет на выходе сигнала. А оно вам надо? Суть ведь не в том чтобы впихнуть ваш $project в JS код, а в том как он завязан на логике работы вашего скрипта, что от него зависит. А что у вас теперь получилось? Ваш серверный код так же обилует множеством ненужных промежуточных переменных. А ведь все проще: <?php $projectx = "http://".$project; function isSiteAvailable($projectx) { // проверка на валидность представленного url if(!filter_var($projectx, FILTER_VALIDATE_URL)) return 'error'; // создаём curl подключение $cl = curl_init($projectx); curl_setopt($cl,CURLOPT_CONNECTTIMEOUT,10); curl_setopt($cl,CURLOPT_HEADER,true); curl_setopt($cl,CURLOPT_NOBODY,true); curl_setopt($cl,CURLOPT_RETURNTRANSFER,true); // получаем ответ $response = curl_exec($cl); curl_close($cl); $project = preg_replace("/[^a-zа-я0-9-.]+/is","",$_GET["name"]); if ($response) return '<img style="vertical-align:-5px;" src="/images/online.png"></img> <font color="#0dd82e">Работает</font>'; else { if(file_exists('../../images/screens/'.$project.'.png')) unlink('../../images/screens/'.$project.'.png'); mysql_query("update `ca` set `type`='0' where `link`='".$project."'"); return '<img style="vertical-align:-5px;" src="/images/offline.png"></img> <font color="red">Не работает</font>'; } } if(isset($projectx)) echo isSiteAvailable($projectx); ?> И теперь у вас этот код будут работать через раз по разному сценарию, так как используя мой пример $_GET["name"] будет через раз, и обновление: mysql_query("update `ca` set `type`='0' where `link`='".$project."'"); просто бессмысленное. А ведь должна же быть некая логика. А ее нет сейчас вообще. |
суть я поняла) а как сделать чтобы выводилось оно само к примеру через 5 сек после полной загрузки страницы?
|
Цитата:
|
Часовой пояс GMT +3, время: 15:32. |