Вернуться   W&PBBS > Software > Вопросы программирования
Имя
Пароль
FAQ Пометить все разделы прочитанными



Ответ
Опции темы
Старый 09-01-2013, 23:22 Ссылка на пост    #1
=SVD=
W&P Team
W&P Team
 
=SVD=

На форуме с: 19.11.04
Провел: 5д. 11ч. 38мин.

PHP - include

Еще один вопрос по PHP, пытаюсь разобраться но не пойму одного момента

работает test.php

Ищу с его помощью и нахожу нужную строку в файле cat.txt, строка соответствует переменной $cat;
PHP код:
 $fopen=@file("temp/cat.txt");
$need=$cat;  
//$main_file .= $cat;
$main_file .= $fopen[$need-1]; 

либо через группировку
PHP код:
 $groups file("temp/cat.txt");
  
$main_file .= ''.$groups[$cat 1].''

и так и так находит четко и выводит содержимое строки, НО
если строка содержит просто текст или текст с тегами html - проблем нет, если попалась строка содержащая вызов другого файла через
<? include "http://domen.ru/file_001.php"; ?>
, то ничего не выводится.

Вопрос: можно ли таким способом заставить исполниться команду include или require? Очень надо, чтобы при попадании на эту строку был вызван вспомогательный файл, т.к. в строку файла cat.txt я не могу запихнуть таблицу (я таблицу вставил во вспомогательный файл).

+ пример cat.txt
Код:
<p align="justify"><img border="0" src="images/000.png" width="140" height="44"><br>Операция провалена. 
<? include "http://domen.ru/file_001.php"; ?>
<br>Кумулятивный эффект ...
=SVD= вне форума   Вставить выделенное Отправить сообщение для  =SVD= с помощью ICQ      Ответить с цитированием
Старый 10-01-2013, 02:18 Ссылка на пост    #2
UncleByte
Фотошопер
 
UncleByte

На форуме с: 13.11.02
Провел: 1мес. 3нед. 1д. 16ч. 34мин.

Для начала погляди на php.su как настраивается php и выясни есть ли у тебя доступ к php.ini - оттуда и начинай копать.
UncleByte вне форума   Вставить выделенное      Ответить с цитированием
Старый 10-01-2013, 07:30 Ссылка на пост    #3
=SVD=
W&P Team
W&P Team
 
=SVD=

На форуме с: 19.11.04
Провел: 5д. 11ч. 38мин.

Доступ есть, и часть настроек уже внесены. Что вписать для этого случая?
=SVD= вне форума   Вставить выделенное Отправить сообщение для  =SVD= с помощью ICQ      Ответить с цитированием
Старый 10-01-2013, 09:24 Ссылка на пост    #4
=SVD=
W&P Team
W&P Team
 
=SVD=

На форуме с: 19.11.04
Провел: 5д. 11ч. 38мин.

Если в конфигурационном файле (php.ini) установить allow_url_fopen=1, то результата нет .

Редактировалось =SVD=
10-01-2013 09:43.
=SVD= вне форума   Вставить выделенное Отправить сообщение для  =SVD= с помощью ICQ      Ответить с цитированием
Старый 10-01-2013, 18:28 Ссылка на пост    #5
yale
Серфер
 
yale


Сообщений: 406
На форуме с: 13.03.03
Провел: 3нед. 4д. 12мин.

Для того, что бы директивы внутри файла (если они представляют собой РНР инструкции) исполнялись, тогда нужен иной подход. В твоем примереты не интерпретируешь содержимое файла, а только его обрабатываешь как простой текст.

Если модифицировать твой пример (любой из них), то получив текстовую стороку, тебе следует ее проверить на предмет наличия инструкции "include", а затем эту инструкцию выполнить, коли нашлась.

см. например, функцию "eval" в справке, она выполняет РНР инструкции, которые содержатся в строке.
yale вне форума   Вставить выделенное Отправить сообщение для  yale с помощью ICQ      Ответить с цитированием
Старый 10-01-2013, 23:20 Ссылка на пост    #6
=SVD=
W&P Team
W&P Team
 
=SVD=

На форуме с: 19.11.04
Провел: 5д. 11ч. 38мин.

Спасибо yale за совет.

Прошу подсказки
PHP код:
 print "$groups[$cat - 1]";
$str $groups[$cat 1];
//echo $str;
eval ("\$str = \"$str\";"); 

Ругается:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting ']'

на
PHP код:
 print "$groups[$cat - 1]"

хотел увидеть выбранную строку, которую передам в eval.
=SVD= вне форума   Вставить выделенное Отправить сообщение для  =SVD= с помощью ICQ      Ответить с цитированием
Старый 10-01-2013, 23:32 Ссылка на пост    #7
=SVD=
W&P Team
W&P Team
 
=SVD=

На форуме с: 19.11.04
Провел: 5д. 11ч. 38мин.

Сам разобрался - лишние кавычки
PHP код:
 print $groups[$cat 1]; 

только другой вопрос - ничего не отображается. Почему, кто подскажет?

Уточню: текст и html выходят, строка с include даже текстом не отображается, ни то чтобы исполниться.
=SVD= вне форума   Вставить выделенное Отправить сообщение для  =SVD= с помощью ICQ      Ответить с цитированием
Старый 11-01-2013, 00:01 Ссылка на пост    #8
=SVD=
W&P Team
W&P Team
 
=SVD=

На форуме с: 19.11.04
Провел: 5д. 11ч. 38мин.

Решил вопрос с отображением строки, - убрал теги <?php ?> в строке и получил

на echo $str;
Код:
include 'http://domen.ru/file_001.php'

но ничего не произошло по
eval ("\$str = \"$str\";");


?
=SVD= вне форума   Вставить выделенное Отправить сообщение для  =SVD= с помощью ICQ      Ответить с цитированием
Старый 11-01-2013, 00:59 Ссылка на пост    #9
=SVD=
W&P Team
W&P Team
 
=SVD=

На форуме с: 19.11.04
Провел: 5д. 11ч. 38мин.

PHP код:
 eval ('?>' . @file_get_contents("$str") . '<?'); 

тоже ничего не дает.

allow_url_fopen = 1
=SVD= вне форума   Вставить выделенное Отправить сообщение для  =SVD= с помощью ICQ      Ответить с цитированием
Старый 11-01-2013, 13:14 Ссылка на пост    #10
yale
Серфер
 
yale


Сообщений: 406
На форуме с: 13.03.03
Провел: 3нед. 4д. 12мин.

Я не учел, что eval в твоем случае выполняет функцию include, которая работает с подключаемыми файлами в формате РНР, а текст она игнорирует.
PHP код:
<?php 
$file 
'wap.txt'
$search 'a';  
if (!
is_readable($file)) exit('Error: File "'.$file.'" not found or cannot read it.'); 
$result strParser($file$search); 
var_dump($result);  
function 
strParser($file$search) { 
    
$regexp '@^[^"]+"([^"]+)";.*@i'
    
$strings file($file); 
    
$result = array(); 
    foreach (
$strings as $key => $val) { 
        
$url false
        if (
strpos($val'include')) { 
             if (
preg_match($regexp$val$url)) { 
                
//if include "LINK" was found 
                
$strNum null
                
$value null
                list(
$strNum$value) = strParser($url[1]); 
                
$result[$file][$strNum] = $value
            } 
        }else{ 
            
//just text search 
            
if (strpos($val$search)!==false$result[$file][$key] = htmlspecialchars($val); 

        } 
    } 
    return 
$result
?>
yale вне форума   Вставить выделенное Отправить сообщение для  yale с помощью ICQ      Ответить с цитированием
Старый 11-01-2013, 22:58 Ссылка на пост    #11
=SVD=
W&P Team
W&P Team
 
=SVD=

На форуме с: 19.11.04
Провел: 5д. 11ч. 38мин.

Решил вопрос с include

строка содержит
Код:
include ("./cat_001.php");

при этом
PHP код:
 $main_file .= '<? <p align="center">'.$need.'</p>'
результат в виде текста

при этом
PHP код:
 $main_file .= '<? <p align="center">'.eval($need).'</p>'
результат исполняет include. Что и требовалось.

Но появилась новая проблема место где появляется результат определен $main_file .

так вот если текст или html, то все на месте, а если "инклюдится", то появляется первым блоком (лев. верхний угол) впереди всех данных, т.е. вышла за пределы форматирования.
Проверил, если руками вписать код (include), то все на своих местах, если выполнено через eval, то вставка идет первой.

Как быть?
=SVD= вне форума   Вставить выделенное Отправить сообщение для  =SVD= с помощью ICQ      Ответить с цитированием
Старый 11-01-2013, 23:12 Ссылка на пост    #12
yale
Серфер
 
yale


Сообщений: 406
На форуме с: 13.03.03
Провел: 3нед. 4д. 12мин.

сложно что-то сказать, не видя кода.
а чем мой скрипт плох? решает поставленную задачу
yale вне форума   Вставить выделенное Отправить сообщение для  yale с помощью ICQ      Ответить с цитированием
Старый 12-01-2013, 00:05 Ссылка на пост    #13
=SVD=
W&P Team
W&P Team
 
=SVD=

На форуме с: 19.11.04
Провел: 5д. 11ч. 38мин.

Нет, стал ругаться при парсере, т.к. в txt файле еще куча кода, поэтому не стал углубляться. Решил добить eval на прямую и получилось.

Но тебе, огромное спасибо за совет.

Редактировалось =SVD=
17-01-2013 01:41.
=SVD= вне форума   Вставить выделенное Отправить сообщение для  =SVD= с помощью ICQ      Ответить с цитированием
Ответ


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра Оценка этой теме
Оценка этой теме:

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

vB коды Вкл.
[IMG] код Вкл.
Быстрый переход





Предупреждение: Никакого детского порно в запросах и ссылках.
Любое упоминание детского порно в контексте будет пресекаться.


Часовой пояс GMT +4, серверное время: 18:31.