Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: rip_darkman в Feb 03, 2008, 15:55



Титла: Php 5  syntax error
Публикувано от: rip_darkman в Feb 03, 2008, 15:55
Parse error: syntax error, unexpected '/' in /var/www/.tmp/edit_db_1.php on line 3

Ето и кодът на въпросния php скрипт :
Цитат
<?php

include_once(/home/vrs.inc);

$mysql_id = mysql_connect($hostname, $db_user , $password);
mysql_select_db($mysql_id, 'teachers';);

echo "<HTML> <HEAD><TITLE>Edit database</TITLE></HEAD> <BODY>";
echo "<form action='edit_db_1.php' method='POST'>";
echo "<input type='hidden' NAME='submited' VALUE='1'>";
echo "<input type='submit' value='Submit' >";
echo "</form>";
echo "</BODY>";
echo "</HTML>";
?>

В книжката ми за PHP пише,че вкарване на информация чрез include() от директория,която не е в  Apache (/var/www в моя случай) ,е допустимо.
Ето и цитат от /home/vrs.inc
Цитат
$hostname='localhost';
$db_user='nqkoi_user';
$password='nqkakva_parola';

Проблемът според мен,е че въобще не иска да възприеме като източник директория,която почва с " / ".А ми се иска по този начин да стане предаването на паролите за mysql за допълнителна сигурност.Благодаря Ви предварително.


Титла: Php 5  syntax error
Публикувано от: romeo_ninov в Feb 03, 2008, 17:13
пробвай да преместиш inc файла под root-a на www и пробвай пак, защото вероятно апаш няма права да чете файла


Титла: Php 5  syntax error
Публикувано от: neter в Feb 03, 2008, 17:14
1. Загради /home/vrs.inc в кавички. Т.е. да стане
Примерен код
include_once("/home/vrs.inc");

2. vrs.inc трябва също да е оградено от <? ?>, тъй като е php код от променливи. Т.е. трябва да изглежда така
Примерен код
<?

$hostname='localhost';
$db_user='nqkoi_user';
$password='nqkakva_parola';

?>


Титла: Php 5  syntax error
Публикувано от: rip_darkman в Feb 03, 2008, 23:52
Благодаря за помоща ,neter.  :ok:

Като пробвах с кавички преди ми изкарваше информацията в vrs.inc :) А то се оказало,че трябва и inc-файлът да е с отварящи етикети ...

Romeo_ninov ,целта беше точно apache да няма правата да чете този файл :p Само PHP дотолкова,че да го include-не.(но не и да листва информацията при сваляне на edit_db_1.php)


Титла: Php 5  syntax error
Публикувано от: romeo_ninov в Feb 04, 2008, 07:52
Цитат (rip_darkman @ Фев. 04 2008,00:52)
Romeo_ninov ,целта беше точно apache да няма правата да чете този файл :p Само PHP дотолкова,че да го include-не.(но не и да листва информацията при сваляне на edit_db_1.php)

А ти къде мислиш че работи РНР? В средата на апаша (да не те затрудняваме) и наследява от него всички права


Титла: Php 5  syntax error
Публикувано от: sunshine в Feb 04, 2008, 11:38
rip_darkman, за да нямаш проблеми ползвай единична кавичка за php а за html двойна, а не обратното,
реда include_once(/home/vrs.inc); за да не ти дава грешка трябва да е в кавички единични или двойни по принцип защото имената на файлове се водят като масив от символи (стринг) и трябва да стане  include_once('/home/vrs.inc';); и вместо да поставяш на всеки ред echo можеш да сложеш само веднъж, а echo да слагаш когато имаш цикъл който да извежда нещо или някаква проверка, също така вместо echo можеш да ползваш print в различните му форми.

echo '<HTML> <HEAD><TITLE>Edit database</TITLE></HEAD> <BODY>
<form action="edit_db_1.php" method="POST">
<input type="hidden" NAME="submited" VALUE="1">
<input type="submit" value="Submit" >
</form>
</BODY>';
echo '</HTML>';


Титла: Php 5  syntax error
Публикувано от: VladSun в Feb 04, 2008, 13:04
За кавичките - използването на единична кавичка в PHP код означава: никакво парсване на стринга" - т.е. ако имаш в него променливи или специални символи (прим. \n) те ще се приемат като символи:

Примерен код

$var = 'variable';
echo 'This is a $var \n.'
ще даде в резултат, точно:
This is a $var \n.

Ако използваш двойни кавички, горният пример ще даде:
This is a variable
.


За предпочитане е, когато нямаш променливи или специални символи в string-a да ползваш единични кавички - много по-бързо се парсва от PHP-то.

За по-големи блокове HTML (или стрингове изобщо) можеш да ползваш този синтаксис:
Примерен код

       echo <<< HERE
       This is a $var
HERE


HERE е свободно избираем дума-делимитер - т.e. string-a почва от HERE и завършва при следващата му поява. Особеното е, че пред завършващия делимитер не трябва да има никакви шпации и табулации - иначе ще ти даде синтактична грешка.

ПП: Гледам, че искаш по-висока сигурност - макар и аз да не го прилагам, някои хора препоръчват променливите, които съдържат чувствителна информация да се унищожат веднага след използването им, за да се избегне евентуалния им прочит чрез пробив в кода по-нататък.





Титла: Php 5  syntax error
Публикувано от: VladSun в Feb 04, 2008, 13:28
Цитат (neter @ Фев. 03 2008,17:14)
2. vrs.inc трябва също да е оградено от <? ?>, тъй като е php код от променливи. Т.е. трябва да изглежда така
Примерен код
<?

$hostname='localhost';
$db_user='nqkoi_user';
$password='nqkakva_parola';

?>

;)
Цитат
 short_open_tag  boolean

    Tells whether the short form (<? ?> ) of PHP's open tag should be allowed. If you want to use PHP in combination with XML, you can disable this option in order to use <?xml ?> inline. Otherwise, you can print it with PHP, for example: <?php echo '<?xml version="1.0"'; ?> . Also if disabled, you must use the long form of the PHP open tag (<?php ?> ).

        Note: This directive also affects the shorthand <?= , which is identical to <? echo . Use of this shortcut requires short_open_tag to be on.


Титла: Php 5  syntax error
Публикувано от: neter в Feb 04, 2008, 15:52
VladSun, мерси че си разяснил вместо мен. След темата с бозата, ме домързя да пиша дълги обяснения и тук и го дадох по-набързо. Написал съм нещата така, както бих ги написал и аз. Тъй като в по-честия случай ми е нужна употребата на двойни кавички, използвам единични кавички само когато се налага, защото за случаите, когато е все едно дали са двойни или единични, двойните кавички се виждат по-лесно в кода :) (честно казано не съм правил тестове кои кавички се парсват по-бързо). Отварящия таг също го пиша в пълната му форма, само когато се налага, понеже в моята дейност много рядко се налага да смесвам php и xml, а по принцип в php.ini по подразбиране си седи "short_open_tag = On". Общо взето, препоръката ми към rip_darkman е, да си изгради собствена схема от навици, която най-много ще му приляга на начина на работа, за да може да пише нещата по-бързо, вместо да губи мисловно време в несъществени неща. И естествено, rip_darkman, недей да си пестиш четенето ;)


Титла: Php 5  syntax error
Публикувано от: VladSun в Feb 08, 2008, 01:22
Цитат (neter @ Фев. 04 2008,15:52)
честно казано не съм правил тестове кои кавички се парсват по-бързо

Аз съм правил ;)

Примерен код
$s = "blah-blah $blah"

е ~ два пъти по-бавно от
Примерен код
$s = 'blah-blah '.$blah


Титла: Php 5  syntax error
Публикувано от: neter в Feb 08, 2008, 15:24
Аха. Съгласих се. Сега ме чака редактиране на една торба скриптове. Ама карай, важен е крайният резултат. Пак мерси за информацията ;)


Титла: Php 5  syntax error
Публикувано от: Nikolavp в Feb 08, 2008, 18:05
Цитат (VladSun @ Фев. 08 2008,02:22)
Цитат (neter @ Фев. 04 2008,15:52)
честно казано не съм правил тестове кои кавички се парсват по-бързо

Аз съм правил ;)

Примерен код
$s = "blah-blah $blah"

е ~ два пъти по-бавно от
Примерен код
$s = 'blah-blah '.$blah

Много интересно никога не се бях замислял, а и не сам го виждал по съвети за оптимизиране на кода :). Въпреки, че не пиша много на php(даже никак). Винаги сам се чудел на такива работи :)


Титла: Php 5  syntax error
Публикувано от: mom в Feb 08, 2008, 20:39
Написах следното:
Примерен код

   $str = ';la fsdjfn sdofjp;jjkl df;psdfh jldsp;jdf iljldsfj isldofj sdf';
   $time1 = microtime(true);
   for ($i=0; $i<100; $i++) {
      $foo = "sdfgs gfs df gdsfgh dgfhd fghdfg $str";
   }
   $time2 = microtime(true);

   $time3 = microtime(true);
   for ($i=0; $i<100; $i++) {
      $foo = "sdfgs gfs df gdsfgh dgfhd fghdfg ".$str;
   }
   $time4 = microtime(true);
   echo number_format(($time2-$time1), 20, '.', '')."\n";
   echo number_format(($time4-$time3), 20, '.', '')."\n";


и пуснах. След многократно натискане на F5 резултатът устойчиво клонеше към:

0.00007104873657226562
0.00004696846008300781

Според мен наистина има разлика за времето на парсване но си е направо пренебрежима от 3 до 5 стохилядни от секундата, т.е. трябват поне 10000 подобни цикъла със стрингови операции, че да има наистина осезаемо забавяне.

Разбира се на различни машини ще е различно