Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Почему ошибка в строке задания константы?
 
 автор: Lisnerpa   (15.09.2005 в 15:44)   письмо автору
 
 

Вот эта строка вызывает ошибку:

define(WRK_DIR,"C:\Program Files\VB_5\My_Proj\Dopis_Otr\DopOtr_Turs\");

Чем она плоха не понятно. :(

   
 
 автор: Lisnerpa   (15.09.2005 в 15:47)   письмо автору
 
   для: Lisnerpa   (15.09.2005 в 15:44)
 

И даже запись этого постинга в форум привела к ошибке:

Fatal error: Call to undefined function: nl2rb() in /.../softtime/html/forum/addtheme.php on line 219

хотя топик преспокойно появился...

   
 
 автор: cheops   (15.09.2005 в 16:40)   письмо автору
 
   для: Lisnerpa   (15.09.2005 в 15:47)
 

Да был сбой в работе форума - теперь всё нормализовалось.

   
 
 автор: Lisnerpa   (16.09.2005 в 14:12)   письмо автору
 
   для: cheops   (15.09.2005 в 16:40)
 

И бонба сия упала в обе воронки сразу. :)

   
 
 автор: cheops   (15.09.2005 в 16:39)   письмо автору
 
   для: Lisnerpa   (15.09.2005 в 15:44)
 

Это одна из причин в действии, за что ругают проектировщиков Microsoft - ну на кой ляд было испльзовать обратный слэш для разделения директорий в путях, если всю жизнь для этого использовался прямой слеш /, а обратный использовался для экранирования спец-символов.
Перепишите так
<?php
  define
(WRK_DIR"C:\\Program Files\\VB_5\\My_Proj\\Dopis_Otr\\DopOtr_Turs\\");
?>

   
 
 автор: isset   (15.09.2005 в 17:36)   письмо автору
 
   для: cheops   (15.09.2005 в 16:39)
 

Всю жизнь чего/кого ?

И никто не запрещает использовать / в путях...


<?php
  define
(WRK_DIR"C:/Program Files/VB_5/My_Proj/Dopis_Otr/DopOtr_Turs/");
?> 

   
 
 автор: cheops   (15.09.2005 в 23:25)   письмо автору
 
   для: isset   (15.09.2005 в 17:36)
 

Да, хорошо что можно использовать прямой слэш, хотя вообще рекомендуется использовать обратный \

   
 
 автор: Евгений Петров   (15.09.2005 в 23:34)   письмо автору
 
   для: cheops   (15.09.2005 в 23:25)
 

Почему (рекомендуется)?

   
 
 автор: cheops   (16.09.2005 в 00:59)   письмо автору
 
   для: Евгений Петров   (15.09.2005 в 23:34)
 

Не знаю... может перестраховка от судебных тяжб с владельцами UNIX-систем, а может просто чёрт дёрнул кого-нибудь так и испльзуется \

   
 
 автор: Евгений Петров   (16.09.2005 в 01:09)   письмо автору
 
   для: cheops   (16.09.2005 в 00:59)
 

Да за что за что а за слеши их так засудят, что мало не покажется... :)

   
 
 автор: isset   (16.09.2005 в 00:00)   письмо автору
 
   для: cheops   (15.09.2005 в 23:25)
 

И кем (точнее где)?

   
 
 автор: cheops   (16.09.2005 в 00:58)   письмо автору
 
   для: isset   (16.09.2005 в 00:00)
 

Microsoft, кнгиги в которых я это впервые увидел (по DOS) я сейчас уже не подниму, но при работе над нашими книгами - редакторы упорно исправялют / на \ - а они не одну сотню книг отредактировали и знают, как надо, а как не надо... при описании конфигурационных файлов приходится настаивать. Да вы откройте "Moй компьютер" или "Проводник" - и сами увидите это безобразие... Это у них стандарт де-факто.

   
 
 автор: isset   (16.09.2005 в 01:13)   письмо автору
 
   для: cheops   (16.09.2005 в 00:58)
 

Надо бы эту тему разрулить...

Даже если так, скорее всего приложение работать будет под unix...
Например в мануале уже нашел:
Замечание: Помните, что при указании путей в конфигурационных файлах Apache под Windows, все обратные слэши, например c:\directory\file.ext должны быть изменены на прямые: c:/directory/file.ext.
.....
На платформах Windows в качестве разделителей имен директорий используются оба слэша (прямой / и обратный \). В других операционных системах разделителем служит прямой слэш (/). 


Да и в примерах используется прямой слэш

   
 
 автор: cheops   (16.09.2005 в 01:30)   письмо автору
 
   для: isset   (16.09.2005 в 01:13)
 

-

   
 
 автор: isset   (16.09.2005 в 01:37)   письмо автору
 
   для: cheops   (16.09.2005 в 01:30)
 

Не понимаю почему рекомендуется. Программист должен знать все о путях, это основы и с этим ему обязательно придется столкнуться. Не думаю что удобнее смотрится запись "c:\\www\\files\\", чем "c:/www/files/"

Ну ладно, оффтоп получается, будем считать что ваши редакторы более правы, чем пхп-мануал (т.к. он для unix писался более) ...

   
 
 автор: cheops   (16.09.2005 в 01:48)   письмо автору
 
   для: isset   (16.09.2005 в 01:37)
 

Про то и речь... однако при создании Windows программы вы будете вынуждены использовать первый вариант - вот откройте в IE (Файл - Открыть) любой локальный html-файл - смотрите, что в адресной строке и в названии... чтобы не быть белой вороной, волей не волей приходится использовать обратные слэши. Да они и сами-то навреное рады были бы сейчас на прямой заменить, но весь код разом уже не передлаешь...

   
 
 автор: cheops   (16.09.2005 в 01:36)   письмо автору
 
   для: isset   (16.09.2005 в 01:13)
 

Ну да... это же UNIX-оды писали для пользователей Windows - все обратные слеши (\) в портированных под Windows программах лучше заменять на прямые, так как Windows всё-равно, а программам нет. Прямой слэш испокон веку использовался в UNIX для разделения, так как Интернет покоится на UNIX, разработчикам Windows всё равно пришлось реализовывать и этот вариант (хотя и по сей день испльзуется \)... В UNIX для разделения путей испльзуется строго прямой слеш /, а обратный (\) - для экранирования.

   
 
 автор: Lisnerpa   (16.09.2005 в 14:18)   письмо автору
 
   для: Lisnerpa   (15.09.2005 в 15:44)
 

Спасибо за ответы и за обсуждение.
в итоге получается, что ошибки не вызывают след. записи указанной строки:

define(WRK_DIR,"C:\Program Files\VB_5\My_Proj\Dopis_Otr\DopOtr_Turs");
define(WRK_DIR, "C:/Program Files/VB_5/My_Proj/Dopis_Otr/DopOtr_Turs/");
define(WRK_DIR, "C:\\Program Files\\VB_5\\My_Proj\\Dopis_Otr\\DopOtr_Turs\\");

То есть ошибку вызвала пара рядом стоящих символов \"
Но...
Какого лешего это вообще произошло?
Я ведь ничего особенного ... только задал константу (прям как товарищ Саахов, "только вошел-да!")
Ну кому какое дело, что за конгломерат символов я там наворотил?
а теперь вот поди выбирай - какая строка задания константы "краше". :)

   
 
 автор: cheops   (16.09.2005 в 19:17)   письмо автору
 
   для: Lisnerpa   (16.09.2005 в 14:18)
 

Дело в том, чтобы в двойных кавычках указать символ двойных кавычек - его следует экранировать обратным слешем, т.е.
<?php
  
echo "Выведите фразу \"Hello world\" и будем вам счастье";
?>

Выведит фразу
Выведите фразу "Hello world" и будем вам счастье

Если двойные кавычки внутри строки не экранировать, то первая встреченная кавычка будет восприниматься как закрывающая. Поэтому когда в конце строки встречается \" PHP-интерпретатор полагает что вы экранировали кавычку и дальше идёт строка - и уж как он дальше будет интерпретировать бог его знает. В любом случае когда он встретит ещё одну открывающую кавычку - он посчитает её закрывающей. Итого, к вашему решению можно добавить ещё одно, невызывающее ошибок

define(WRK_DIR,"C:\Program Files\VB_5\My_Proj\Dopis_Otr\DopOtr_Turs\\");

Но если вы не хотите проблем, всегда используйте

define(WRK_DIR, "C:/Program Files/VB_5/My_Proj/Dopis_Otr/DopOtr_Turs/");

   
 
 автор: Lisnerpa   (16.09.2005 в 19:55)   письмо автору
 
   для: cheops   (16.09.2005 в 19:17)
 

Теперь все встало на свои места.
и могу Вам сказать. что выбрал именно тот вариант записи, который у Вас написан последним. соответственно и изменять его не буду.
define(WRK_DIR, "C:/Program Files/VB_5/My_Proj/Dopis_Otr/DopOtr_Turs/");

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования