Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Не работает подключение своей библиотеки на PHP к index.php

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Включение закрывающей скобки библиотеки в текст скрипта PHP
Las
Отправлено: 17 Марта, 2012 - 03:30:10
Post Id



Новичок


Покинул форум
Сообщений всего: 34
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




Это тестовый пример на подключение библиотеки:
Имеется: основной файл index.php, он короткий, вот он (описание функции conc_with_spaces($str1,$str2)
закомментировано, потому что когда она находится в index.php в скрипте PHP, все работает):

CODE (htmlphp):
скопировать код в буфер обмена
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2.    "http://www.w3.org/TR/html4/loose.dtd">
  3. <html>
  4.     <head>
  5.         <title>Пример</title>
  6.     </head>
  7.     <body>
  8. <?php
  9. include "myresource.c";
  10. //function conc_with_spaces($str1,$str2) {
  11. //                      $str2 = str_replace(' ', '_', $str2);
  12. //              $result = $str1.$str2;
  13. //              $result = $str1.str_replace('_', ' ', $str2);
  14. //              return $result;
  15. //      };
  16.  
  17. $dir = "faces/";
  18. // Открыть заведомо существующий каталог и начать считывать его содержимое
  19. if (is_dir($dir))
  20. {
  21.    if ($dh = opendir($dir))
  22.         {
  23.        while (($file = readdir($dh)) !== false)
  24.                         {
  25.                         if (($file !=='..') && ($file !=='.'))
  26.                                 {
  27.                           echo '<img src='.'"'.conc_with_spaces($dir,$file).'">';
  28.                                 }
  29.                         }
  30.                 }
  31.        closedir($dh);
  32. }
  33.      ?>
  34.         </body>
  35. </html>


После этого я выношу описание функции в отдельный файл myresource.c в той же папке, вот и он (скопирован):

CODE (htmlphp):
скопировать код в буфер обмена
  1. {?
  2. function conc_with_spaces($str1,$str2) {
  3.                 $str2 = str_replace(' ', '_', $str2);
  4.                 $result = $str1.$str2;
  5.                 $result = $str1.str_replace('_', ' ', $str2);
  6.                 return $result;
  7.         }
  8. ?}


и включаю его в index.php функцией include "myresource.c"; И все перестает работать.

Выдается страница с сообщением об ошибке:

CODE (htmlphp):
скопировать код в буфер обмена
  1. {? function conc_with_spaces($str1,$str2) { $str2 = str_replace(' ', '_', $str2); $result = $str1.$str2; $result = $str1.str_replace('_', ' ', $str2); return $result;   } ?}

CODE (htmlphp):
скопировать код в буфер обмена
  1. Fatal error: Call to undefined function conc_with_spaces() in C:\wamp\www\Test2\index.php on line 31


При этом в код страницы включает в себя неуместную скобку, закрывающую скрипт PHP:

CODE (htmlphp):
скопировать код в буфер обмена
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
  2. "http://www.w3.org/TR/html4/loose.dtd">
  3. <html>    
  4. <head>        <title>Пример</title>                 </head>    
  5. <body>
  6. {?
  7. function conc_with_spaces($str1,$str2)
  8. {
  9.         $str2 = str_replace(' ', '_', $str2);          
  10.         $result = $str1.$str2;         
  11.         $result = $str1.str_replace('_', ' ', $str2);          
  12.         return $result;        
  13. }
  14. ?}<br />
.........ВОТ ЭТОЙ ЗАКРЫВАЮЩЕЙ СКОБКИ ?} НЕ ДОЛЖНО БЫТЬ? ее нет в index.php.
CODE (htmlphp):
скопировать код в буфер обмена
  1. <b>Fatal error</b>:  Call to undefined function conc_with_spaces() in <b>C:\wamp\www\Test2\index.php</b> on line <b>31</b><br />


Она досрочно сакрывает скрипт PHP и дальнейшее (Fatal error) уже понятно.

ВОПРОС: откуда она берется? Ни в одном руководстве по подключению своих библиотек я этого не нашел.
Функция include() не должна помещать в текст PHP скрипта закрывающую скобку из файла библиотеки.

Все это реализовано на локальном сервере WAMPSERVER.

Кто может помочь, знает или хоть догадывается, почему это происходит, ответьте пожалуйста.
Спасибо, с уважением Михаил Щеглов.


Отредактировано модератором: OrmaJever, 17 Марта, 2012 - 14:15:36
Код нужно хоть как то в теги обводить.
 
 Top
DelphinPRO
Отправлено: 17 Марта, 2012 - 03:47:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




при чем здесь С, если пишете на php? O_o
в файле с функцией код заключается также в <?php ?>
файл имеет раширение .php
include 'myresource.php';


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Las
Отправлено: 17 Марта, 2012 - 04:07:55
Post Id



Новичок


Покинул форум
Сообщений всего: 34
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




Я все это пробовал:
и расширение .php в файле библиотеки;
И заключение текста библиотеки в скобки <?php...?>;
index файл имеет расширение index.php
include 'myresource.php'; include( 'myresource.php'); include "myresource.php"';
include ("myresource.php");

Все это перепробовано, но результат совершенно такой же.
Я теряюсь в догадках, нахожусь в полной растерянности. По всем руководствам с этим не должно быть проблем. Я грешу на настройки PHP5 в WAMPSERVERE.
Кроме того, у меня Win 7, может в ней надо что-то донастраивать.
Морорчусь уже дней 10, одна надежда - на форумы.
 
 Top
DelphinPRO
Отправлено: 17 Марта, 2012 - 04:13:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




чудеса Улыбка
должно все работать ) возможно и правда дело в настройках сервера
идея попробовать другую сборку уместна? рекомендую open-server[dot]ru/
Las пишет:
Кроме того, у меня Win 7, может в ней надо что-то донастраивать.
у меня тоже win7 - подобных проблем не наблюдал

(Отредактировано автором: 17 Марта, 2012 - 04:15:12)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Las
Отправлено: 17 Марта, 2012 - 04:22:39
Post Id



Новичок


Покинул форум
Сообщений всего: 34
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




Пробовал, но не справился с настройкой XAMPа. И потом, какая разница: в WAMPSERVERе
предусмотрены все настройки PHP (знать бы какие), там PHP5, я с ним работаю уже год - все было отлично, пока не дошло до этих долбаных экспериментов с библиотеками.

Хотя насчет опен сервера придется подумать. Не сдохнуть же из-за этих библиотек.
Без них нормальному программисту работать в рабочем режиме нереально, а работать надо,
и в хорошем темпе.

(Отредактировано автором: 17 Марта, 2012 - 04:30:07)

 
 Top
Мелкий Супермодератор
Отправлено: 17 Марта, 2012 - 08:40:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Ещё раз, вот так пробовали:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  function conc_with_spaces($str1,$str2)
  3.  {
  4.  $str2 = str_replace(' ', '_', $str2);
  5.  $result = $str1.$str2;
  6.  $result = $str1.str_replace('_', ' ', $str2);
  7.  return $result;
  8.  }
  9.  ?>


Потому что конструкции {? и ?} не являются PHP-кодом вовсе и выводятся в результирующий документ со всем, что внутри, как есть.


-----
PostgreSQL DBA
 
 Top
Las
Отправлено: 17 Марта, 2012 - 14:09:30
Post Id



Новичок


Покинул форум
Сообщений всего: 34
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




DelphinPRO пишет:
чудеса
должно все работать

Представьте себе, пробовал. Более того : в последней версии у меня так и было.
НО ВАШ СОВЕТ СРАБОТАЛ И ПОМОГ - ВСЕ ЗАРАБОТАЛО! Каким же вы спросите образом?
А через КОМПЬЮТЕРНО-ФОРУМНОЕ ШАМАНСТВО, НА КОТОРОЕ И БЫЛА МОЯ ПОСЛЕДНЯЯ НАДЕЖДА.
Перед тем, как прочитать Ваше сообщение, я стал готовить тест к закачке на сервер в поддомен своего сайта, чтобы проверить, виноват ли WAMPSERVER. Что менял - да что-то по мелочи, чисто на автомате - даже на рдостях и не вспомню.

Правда в письме о Вашем сообщении текст библиотеки выглядел иначе и странно, а именно: квадратные скобки с PHP стояли снаружи, до и после угловых открывающих и закрывющих скобок библиотеки.

Правда, отличается от кода, приведенного на этой странице? Но твердо веруя в силу шаманства, я попробовал. И заработало! Правда, перед картинками выдались эти неуместные [PHP][/PHP]. Тогда я их убрал, а тег <?php в библиотеке заменил на <?PHP - вдруг это повлиял регистр букв. Сработало. Тогда я опять вернул все на свои места и в
этом теге, как и было, написал <?php - оно точно так и было! НО РАБОТАЕТ, ЗАРАЗА, РАБОТАЕТ!

ТАКОВА СИЛА КОМПЬЮТЕРНОГО ШАМАНСТВА! СПАСИБО!
Количество сообщений не позволяет мне повысить Вам рейтинг, но все равно - спасибо, что не отступились и не посчитали меня за идиота.
(Добавление)
И вообще, Мелкий, если Вы такой профи, может сможете объяснить мне ситуацию, изложенную в теме "скрипт PHP не работает в index.html"? Я так понял, уж кому, как не Вам! (http://php.su/forum/topic.php?forum=71&topic=4603)

(Отредактировано автором: 17 Марта, 2012 - 15:36:00)

 
 Top
Мелкий Супермодератор
Отправлено: 17 Марта, 2012 - 15:50:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Las пишет:
может сможете объяснить мне ситуацию, изложенную в теме "скрипт PHP не работает в index.html"?

Не могу, т.к. когда я вижу 8-ую строку, рука тянется к лицу, как-то вот так: и закрывает обзор.

Ладно, если огромным усилием воли предположить, что я этого не вижу: php обрабатывает те файлы, которые ему передал веб-сервер. Если где-то php не исполняется, значит никто его не запустил.


-----
PostgreSQL DBA
 
 Top
Las
Отправлено: 17 Марта, 2012 - 19:33:47
Post Id



Новичок


Покинул форум
Сообщений всего: 34
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




Но 8-я строка скопирована из учебника по PHP с комментарием "так вставляются PHP скрипты в текст html. Выкинуть этот учебник? Или я что-то в нем не так понял?
 
 Top
Las
Отправлено: 19 Марта, 2012 - 00:56:19
Post Id



Новичок


Покинул форум
Сообщений всего: 34
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




Я в шоке! Еще вчера все работало, а сегодня не подключается внешняя собственная библиотека, которая находится в одной папке с index.php

Выдается ошибка:

Warning: include(myresouce.php) [function.include]: failed to open stream: No such file or directory in C:\wamp\www\Test2\index.php on line 12

Warning: include() [function.include]: Failed opening 'myresouce.php' for inclusion (include_path='.;C:\php5\pear') in C:\wamp\www\Test2\index.php on line 12

Fatal error: Call to undefined function conc_with_spaces() in C:\wamp\www\Test2\index.php on line 25

Функция function conc_with_spaces() описана в этой библиотеке.
ЕЩЕ ВЧЕРА ВСЕ РАБОТАЛО!
У меня WAMPSERVER2 и я не знаю, как его настроить!
В каких файлах изменить какие пути или что-то еще...
 
 Top
OrmaJever Модератор
Отправлено: 19 Марта, 2012 - 01:22:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Las, ну дак напишите полный путь от корня файловой системы блин, привыкли к халяве и не понимаете простого.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Las
Отправлено: 19 Марта, 2012 - 01:32:34
Post Id



Новичок


Покинул форум
Сообщений всего: 34
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




Корнем вообще-то считается сама папка www.
Ну, а мне писать полный путь в системе виндос от диска C:\wamp\www\Test2, но ведь вчера и так все работало! Попробую...
(Добавление)
Попробовал, ответ:

Warning: include(C:\wamp\www\Test2\myresouce.php) [function.include]: failed to open stream: No such file or directory in C:\wamp\www\Test2\index.php on line 12

Warning: include() [function.include]: Failed opening 'C:\wamp\www\Test2\myresouce.php' for inclusion (include_path='.;C:\php5\pear') in C:\wamp\www\Test2\index.php on line 12

Fatal error: Call to undefined function conc_with_spaces() in C:\wamp\www\Test2\index.php on line 25

У меня же не удаленный сервер, а локальный wampserver2.
 
 Top
DelphinPRO
Отправлено: 19 Марта, 2012 - 01:51:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Las пишет:
Корнем вообще-то считается сама папка www.

это корень сайта Улыбка
корень файловой системы - другое

по теме - подозреваю, что вы пропустили букву в имени файла resource.php
(Добавление)
Las пишет:
Ну, а мне писать полный путь в системе виндос от диска C:\wamp\www\Test2


полный путь до текущего файла - dirname(__FILE__)
PHP:
скопировать код в буфер обмена
  1. include dirname(__FILE__) . DIRECTORY_SEPARATOR . 'myresource.php';

(Отредактировано автором: 19 Марта, 2012 - 04:13:05)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Las
Отправлено: 19 Марта, 2012 - 03:34:45
Post Id



Новичок


Покинул форум
Сообщений всего: 34
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




сПАСИБО.
Почему вторая строка пустая?
Что означает _FILE_?
После dirname(__FILE__) нужна ;?
что копировать, цифры копировать?
Или вставить эти строки вместо функции include?

Что в итоге получится?
=======================
(Добавление)
Скопировал, вставил. Ответ:

Parse error: parse error in C:\wamp\www\Test2\index.php on line 14

Строка 14: include dirname(__FILE__) . DIRECTORY_SEPARATOR . 'myresource.php';
================================ ======
(Добавление)
После простановки ";", т.е. dirname(__FILE__); БИБЛИОТЕКА ПОДКЛЮЧИЛАСЬ!
Т.е. как я понимаю dirname(__FILE__); выдает полный путь до текущей папки (у меня www),
верно? А Вы к нему присоединяете через DIRECTORY_SEPARATOR (что это такое?
Типа символ "/" - присоединяете мою библиотеку 'myresource.php'. Я верно понял?

ЭТО ОЧЕНЬ ВАЖНО !

Потому что в других папках внутри www лежат фотки и они не выдаются строкой

echo '<img src='.'"'.conc_with_spaces($dir,$file).'">';

К ним что, тоже надо приконкатенировать dirname(__FILE__) . DIRECTORY_SEPARATOR ?

А то вместо фоток выдаются непонятные маленькие прямоугольнички.
А можно вместо dirname(__FILE__) использовать переменную, типа $fulldir=dirname(__FILE__).'/' и с ней работать?
Еще раз СПАСИБО!

(Отредактировано автором: 19 Марта, 2012 - 04:11:25)

 
 Top
DelphinPRO
Отправлено: 19 Марта, 2012 - 04:22:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




__FILE__ "магическая" константа, содержит полное имя текущего файла.
(__DIR__ - путь до текущего файла, __FUNCTION__ - имя функции, __CLASS__ - имя класса, __METHOD__ - имя метода -- все эти константы есть в мануале)

DIRECTORY_SEPARATOR - разделитель директорий (/ или \ в зависимости от типа ОС)

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

в атрибутах SRC у картинок должны быть абсолютные URL от корня сайта. (у вас от www)
/images/pic1.jpg
Las пишет:
А можно вместо dirname(__FILE__) использовать переменную, типа $fulldir=dirname(__FILE__).'/' и с ней работать?

ну если так удобнее, то почему бы нет.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB