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
Форумы портала PHP.SU :: Версия для печати :: Не работает подключение своей библиотеки на PHP к index.php
Форумы портала PHP.SU » » Вопросы новичков » Не работает подключение своей библиотеки на PHP к index.php

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

1. Las - 17 Марта, 2012 - 03:30:10 - перейти к сообщению
Это тестовый пример на подключение библиотеки:
Имеется: основной файл 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.

Кто может помочь, знает или хоть догадывается, почему это происходит, ответьте пожалуйста.
Спасибо, с уважением Михаил Щеглов.
2. DelphinPRO - 17 Марта, 2012 - 03:47:03 - перейти к сообщению
при чем здесь С, если пишете на php? O_o
в файле с функцией код заключается также в <?php ?>
файл имеет раширение .php
include 'myresource.php';
3. Las - 17 Марта, 2012 - 04:07:55 - перейти к сообщению
Я все это пробовал:
и расширение .php в файле библиотеки;
И заключение текста библиотеки в скобки <?php...?>;
index файл имеет расширение index.php
include 'myresource.php'; include( 'myresource.php'); include "myresource.php"';
include ("myresource.php");

Все это перепробовано, но результат совершенно такой же.
Я теряюсь в догадках, нахожусь в полной растерянности. По всем руководствам с этим не должно быть проблем. Я грешу на настройки PHP5 в WAMPSERVERE.
Кроме того, у меня Win 7, может в ней надо что-то донастраивать.
Морорчусь уже дней 10, одна надежда - на форумы.
4. DelphinPRO - 17 Марта, 2012 - 04:13:11 - перейти к сообщению
чудеса Улыбка
должно все работать ) возможно и правда дело в настройках сервера
идея попробовать другую сборку уместна? рекомендую open-server[dot]ru/
Las пишет:
Кроме того, у меня Win 7, может в ней надо что-то донастраивать.
у меня тоже win7 - подобных проблем не наблюдал
5. Las - 17 Марта, 2012 - 04:22:39 - перейти к сообщению
Пробовал, но не справился с настройкой XAMPа. И потом, какая разница: в WAMPSERVERе
предусмотрены все настройки PHP (знать бы какие), там PHP5, я с ним работаю уже год - все было отлично, пока не дошло до этих долбаных экспериментов с библиотеками.

Хотя насчет опен сервера придется подумать. Не сдохнуть же из-за этих библиотек.
Без них нормальному программисту работать в рабочем режиме нереально, а работать надо,
и в хорошем темпе.
6. Мелкий - 17 Марта, 2012 - 08:40:05 - перейти к сообщению
Ещё раз, вот так пробовали:
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-кодом вовсе и выводятся в результирующий документ со всем, что внутри, как есть.
7. Las - 17 Марта, 2012 - 14:09:30 - перейти к сообщению
DelphinPRO пишет:
чудеса
должно все работать

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

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

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

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

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

Ладно, если огромным усилием воли предположить, что я этого не вижу: php обрабатывает те файлы, которые ему передал веб-сервер. Если где-то php не исполняется, значит никто его не запустил.
9. Las - 17 Марта, 2012 - 19:33:47 - перейти к сообщению
Но 8-я строка скопирована из учебника по PHP с комментарием "так вставляются PHP скрипты в текст html. Выкинуть этот учебник? Или я что-то в нем не так понял?
10. Las - 19 Марта, 2012 - 00:56:19 - перейти к сообщению
Я в шоке! Еще вчера все работало, а сегодня не подключается внешняя собственная библиотека, которая находится в одной папке с 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 и я не знаю, как его настроить!
В каких файлах изменить какие пути или что-то еще...
11. OrmaJever - 19 Марта, 2012 - 01:22:56 - перейти к сообщению
Las, ну дак напишите полный путь от корня файловой системы блин, привыкли к халяве и не понимаете простого.
12. Las - 19 Марта, 2012 - 01:32:34 - перейти к сообщению
Корнем вообще-то считается сама папка 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.
13. DelphinPRO - 19 Марта, 2012 - 01:51:31 - перейти к сообщению
Las пишет:
Корнем вообще-то считается сама папка www.

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

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


полный путь до текущего файла - dirname(__FILE__)
PHP:
скопировать код в буфер обмена
  1. include dirname(__FILE__) . DIRECTORY_SEPARATOR . 'myresource.php';
14. Las - 19 Марта, 2012 - 03:34:45 - перейти к сообщению
сПАСИБО.
Почему вторая строка пустая?
Что означает _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__).'/' и с ней работать?
Еще раз СПАСИБО!
15. DelphinPRO - 19 Марта, 2012 - 04:22:25 - перейти к сообщению
__FILE__ "магическая" константа, содержит полное имя текущего файла.
(__DIR__ - путь до текущего файла, __FUNCTION__ - имя функции, __CLASS__ - имя класса, __METHOD__ - имя метода -- все эти константы есть в мануале)

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

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

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

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

 

Powered by ExBB FM 1.0 RC1