За последние 24 часа нас посетили 20078 программистов и 1082 робота. Сейчас ищут 719 программистов ...

Где путь к сессиям изменяется

Тема в разделе "PHP для новичков", создана пользователем ubunta3.0, 30 окт 2019.

  1. ubunta3.0

    ubunta3.0 Зэк
    [ БАН ]

    С нами с:
    23 окт 2019
    Сообщения:
    22
    Симпатии:
    2
    Warning: session_start(): Failed to read session data: user (path: /var/lib/php/sessions) in /var/www/php.xxx/session/handlers.php on line 73

    Код (Text):
    1. <?php ## Переопределение обработчиков сессии.
    2.   // Возвращает полное имя файла временного хранилища сессии.
    3.   // В случае, если нужно изменить тот каталог, в котором должны
    4.   // храниться сессии, достаточно поменять только эту функцию
    5.   function ses_fname($key)
    6.   {
    7.     return dirname(__FILE__)."/sessiondata/".session_name()."/$key";
    8.   }
    9.   // Заглушки - эти функции просто ничего не делают
    10.   function ses_open($save_path, $ses_name)
    11.   {
    12.     return true;
    13.   }
    14.   function ses_close()
    15.   {
    16.     return true;
    17.   }
    18.  
    19.   // Чтение данных из временного хранилища
    20.   function ses_read($key)
    21.   {
    22.     // Получаем имя файла и открываем файл.
    23.     $fname = ses_fname($key);
    24.     return @file_get_contents($fname);
    25.   }
    26.  
    27.   // Запись данных сессии во временное хранилище
    28.   function ses_write($key, $val)
    29.   {
    30.     $fname = ses_fname($key);
    31.     // Сначала создаем все каталоги (в случае, если они уже есть,
    32.     // игнорируем сообщения об ошибке)
    33.     @mkdir(dirname(dirname($fname)), 0777);
    34.     @mkdir(dirname($fname), 0777);
    35.     // Создаем файл и записываем в него данные сессии.
    36.     @file_put_contents($fname, $val);
    37.     return true;
    38.   }
    39.  
    40.   // Вызывается при уничтожении сессии
    41.   function ses_destroy($key)
    42.   {
    43.     return @unlink(ses_fname($key));
    44.   }
    45.  
    46.   // Сборка мусора - ищем все старые файлы и удаляем их
    47.   function ses_gc($maxlifetime)
    48.   {
    49.     $dir = ses_fname(".");
    50.     // Получаем доступ к каталогу текущей группы сессии.
    51.     foreach (glob("$dir/*") as $fname) {
    52.       // Файл слишком старый?
    53.       if (time() - filemtime($fname) >= $maxlifetime) {
    54.         @unlink($fname);
    55.         continue;
    56.       }
    57.     }
    58.     // Если директория непуста, она не удалится - будет предупреждение.
    59.     // Мы его подавляем. Если же пуста - удалится, что нам и нужно.
    60.     @rmdir($dir);
    61.     return true;
    62.   }
    63.  
    64.   // Регистрируем наши новые обработчики
    65.   session_set_save_handler(
    66.     "ses_open", "ses_close",
    67.     "ses_read", "ses_write",
    68.     "ses_destroy", "ses_gc"
    69.   );
    70.  
    71.   // Для примера подключаемся к группе сессий test.
    72.   session_name("test1");
    73.   session_start();
    74.   // Увеличиваем счетчик в сессии.
    75.   $_SESSION['count'] = @$_SESSION['count'] + 1;
    76. ?>
    77. <h2>Счетчик</h2>
    78. В текущей сессии работы с браузером Вы открыли эту страницу
    79. <?=$_SESSION['count']?> раз(а).<br>
    80. Закройте браузер, чтобы обнулить счетчик.<br>
    81. <a href="<?=$_SERVER['SCRIPT_NAME']?>" target="_blank">Открыть дочернее окно браузера</a>.
    /var/lib/php/sessions она слздается тут
    а должна создаваться /var/www/php.xxx/session/sessiondata/test1/8k2ji6s3v425hqi932thtq7dnu
    var_dump($fname); так даже показал
     
  2. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Убунта, а чего ты просто не займешься изучением программирования?

    Охота тебе время на всю эту байду тратить?

    Можно ведь прекрасно без этого всего обойтись.

    Посмотри видеоуроки по основам Laravel. Смастери на его основе простенькую CMS. Это намного полезнее и приятнее чем в таких заморочках барахтаться.

    Ты не с того начал вообще.
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Нееее, пусть начнет с выведения данных с БД в html таблицу + используя пагинацию.
     
  4. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Да это все прошлый век же

    вот:

    PHP:
    1. public function index()
    2.   {
    3.     $users = DB::table('users')->paginate(15);
    4.     return view('user.index', ['users' => $users]);
    5.   }
    PHP:
    1. <div class="container">
    2.   @foreach ($users as $user)
    3.     {{ $user->name }}
    4.   @endforeach
    5. </div>
    6.  
    7. {{ $users->links() }}
    всё :)

    Понимаешь, все эти "напиши калькулятор" - это для дебилов, которым больше заняться нечем студентов, чьи преподы так и не научились преподавать, увы и ах.
     
  5. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Как имеем армию Wordpress-ников, не умеющих программировать без плагинов, так теперь к ним имеем армию Laravel-щиков, не умеющих программировать без Laravel.
     
  6. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
  7. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.789
    Симпатии:
    646
    php.ini: [Session], там ищешь соотв. директиву.
     
    MouseZver нравится это.
  8. ubunta3.0

    ubunta3.0 Зэк
    [ БАН ]

    С нами с:
    23 окт 2019
    Сообщения:
    22
    Симпатии:
    2
    Код (Text):
    1. [Session]
    2. ; Handler used to store/retrieve data.
    3. ; http://php.net/session.save-handler
    4. session.save_handler = files
    5.  
    6. ; Argument passed to save_handler.  In the case of files, this is the path
    7. ; where data files are stored. Note: Windows users have to change this
    8. ; variable in order to use PHP's session functions.
    9. ;
    10. ; The path can be defined as:
    11. ;
    12. ;     session.save_path = "N;/path"
    13. ;
    14. ; where N is an integer.  Instead of storing all the session files in
    15. ; /path, what this will do is use subdirectories N-levels deep, and
    16. ; store the session data in those directories.  This is useful if
    17. ; your OS has problems with many files in one directory, and is
    18. ; a more efficient layout for servers that handle many sessions.
    19. ;
    20. ; NOTE 1: PHP will not create this directory structure automatically.
    21. ;         You can use the script in the ext/session dir for that purpose.
    22. ; NOTE 2: See the section on garbage collection below if you choose to
    23. ;         use subdirectories for session storage
    24. ;
    25. ; The file storage module creates files using mode 600 by default.
    26. ; You can change that by using
    27. ;
    28. ;     session.save_path = "N;MODE;/path"
    29. ;
    30. ; where MODE is the octal representation of the mode. Note that this
    31. ; does not overwrite the process's umask.
    32. ; http://php.net/session.save-path
    33. ;session.save_path = "/var/lib/php/sessions"
    34.  
    35. ; Whether to use strict session mode.
    36. ; Strict session mode does not accept uninitialized session ID and regenerate
    37. ; session ID if browser sends uninitialized session ID. Strict mode protects
    38. ; applications from session fixation via session adoption vulnerability. It is
    39. ; disabled by default for maximum compatibility, but enabling it is encouraged.
    40. ; https://wiki.php.net/rfc/strict_sessions
    41. session.use_strict_mode = 0
    42.  
    43. ; Whether to use cookies.
    44. ; http://php.net/session.use-cookies
    45. session.use_cookies = 1
    46.  
    47. ; http://php.net/session.cookie-secure
    48. ;session.cookie_secure =
    49.  
    50. ; This option forces PHP to fetch and use a cookie for storing and maintaining
    51. ; the session id. We encourage this operation as it's very helpful in combating
    52. ; session hijacking when not specifying and managing your own session id. It is
    53. ; not the be-all and end-all of session hijacking defense, but it's a good start.
    54. ; http://php.net/session.use-only-cookies
    55. session.use_only_cookies = 1
    56.  
    57. ; Name of the session (used as cookie name).
    58. ; http://php.net/session.name
    59. session.name = PHPSESSID
    60.  
    61. ; Initialize session on request startup.
    62. ; http://php.net/session.auto-start
    63. session.auto_start = 0
    64.  
    65. ; Lifetime in seconds of cookie or, if 0, until browser is restarted.
    66. ; http://php.net/session.cookie-lifetime
    67. session.cookie_lifetime = 0
    68.  
    69. ; The path for which the cookie is valid.
    70. ; http://php.net/session.cookie-path
    71. session.cookie_path = /
    72.  
    73. ; The domain for which the cookie is valid.
    74. ; http://php.net/session.cookie-domain
    75. session.cookie_domain =
    76.  
    77. ; Whether or not to add the httpOnly flag to the cookie, which makes it inaccessible to browser scripting languages such as JavaScript.
    78. ; http://php.net/session.cookie-httponly
    79. session.cookie_httponly =
    80.  
    81. ; Handler used to serialize data.  php is the standard serializer of PHP.
    82. ; http://php.net/session.serialize-handler
    83. session.serialize_handler = php
    84.  
    85. ; Defines the probability that the 'garbage collection' process is started
    86. ; on every session initialization. The probability is calculated by using
    87. ; gc_probability/gc_divisor. Where session.gc_probability is the numerator
    88. ; and gc_divisor is the denominator in the equation. Setting this value to 1
    89. ; when the session.gc_divisor value is 100 will give you approximately a 1% chance
    90. ; the gc will run on any give request.
    91. ; Default Value: 1
    92. ; Development Value: 1
    93. ; Production Value: 1
    94. ; http://php.net/session.gc-probability
    95. session.gc_probability = 0
    96.  
    97. ; Defines the probability that the 'garbage collection' process is started on every
    98. ; session initialization. The probability is calculated by using the following equation:
    99. ; gc_probability/gc_divisor. Where session.gc_probability is the numerator and
    100. ; session.gc_divisor is the denominator in the equation. Setting this value to 1
    101. ; when the session.gc_divisor value is 100 will give you approximately a 1% chance
    102. ; the gc will run on any give request. Increasing this value to 1000 will give you
    103. ; a 0.1% chance the gc will run on any give request. For high volume production servers,
    104. ; this is a more efficient approach.
    105. ; Default Value: 100
    106. ; Development Value: 1000
    107. ; Production Value: 1000
    108. ; http://php.net/session.gc-divisor
    109. session.gc_divisor = 1000
    110.  
    111. ; After this number of seconds, stored data will be seen as 'garbage' and
    112. ; cleaned up by the garbage collection process.
    113. ; http://php.net/session.gc-maxlifetime
    114. session.gc_maxlifetime = 1440
    115.  
    116. ; NOTE: If you are using the subdirectory option for storing session files
    117. ;       (see session.save_path above), then garbage collection does *not*
    118. ;       happen automatically.  You will need to do your own garbage
    119. ;       collection through a shell script, cron entry, or some other method.
    120. ;       For example, the following script would is the equivalent of
    121. ;       setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
    122. ;          find /path/to/sessions -cmin +24 -type f | xargs rm
    123.  
    124. ; Check HTTP Referer to invalidate externally stored URLs containing ids.
    125. ; HTTP_REFERER has to contain this substring for the session to be
    126. ; considered as valid.
    127. ; http://php.net/session.referer-check
    128. session.referer_check =
    129.  
    130. ; Set to {nocache,private,public,} to determine HTTP caching aspects
    131. ; or leave this empty to avoid sending anti-caching headers.
    132. ; http://php.net/session.cache-limiter
    133. session.cache_limiter = nocache
    134.  
    135. ; Document expires after n minutes.
    136. ; http://php.net/session.cache-expire
    137. session.cache_expire = 180
    138.  
    139. ; trans sid support is disabled by default.
    140. ; Use of trans sid may risk your users' security.
    141. ; Use this option with caution.
    142. ; - User may send URL contains active session ID
    143. ;   to other person via. email/irc/etc.
    144. ; - URL that contains active session ID may be stored
    145. ;   in publicly accessible computer.
    146. ; - User may access your site with the same session ID
    147. ;   always using URL stored in browser's history or bookmarks.
    148. ; http://php.net/session.use-trans-sid
    149. session.use_trans_sid = 0
    150.  
    151. ; Set session ID character length. This value could be between 22 to 256.
    152. ; Shorter length than default is supported only for compatibility reason.
    153. ; Users should use 32 or more chars.
    154. ; http://php.net/session.sid-length
    155. ; Default Value: 32
    156. ; Development Value: 26
    157. ; Production Value: 26
    158. session.sid_length = 26
    159.  
    160. ; The URL rewriter will look for URLs in a defined set of HTML tags.
    161. ; <form> is special; if you include them here, the rewriter will
    162. ; add a hidden <input> field with the info which is otherwise appended
    163. ; to URLs. <form> tag's action attribute URL will not be modified
    164. ; unless it is specified.
    165. ; Note that all valid entries require a "=", even if no value follows.
    166. ; Default Value: "a=href,area=href,frame=src,form="
    167. ; Development Value: "a=href,area=href,frame=src,form="
    168. ; Production Value: "a=href,area=href,frame=src,form="
    169. ; http://php.net/url-rewriter.tags
    170. session.trans_sid_tags = "a=href,area=href,frame=src,form="
    171.  
    172. ; URL rewriter does not rewrite absolute URLs by default.
    173. ; To enable rewrites for absolute pathes, target hosts must be specified
    174. ; at RUNTIME. i.e. use ini_set()
    175. ; <form> tags is special. PHP will check action attribute's URL regardless
    176. ; of session.trans_sid_tags setting.
    177. ; If no host is defined, HTTP_HOST will be used for allowed host.
    178. ; Example value: php.net,www.php.net,wiki.php.net
    179. ; Use "," for multiple hosts. No spaces are allowed.
    180. ; Default Value: ""
    181. ; Development Value: ""
    182. ; Production Value: ""
    183. ;session.trans_sid_hosts=""
    184.  
    185. ; Define how many bits are stored in each character when converting
    186. ; the binary hash data to something readable.
    187. ; Possible values:
    188. ;   4  (4 bits: 0-9, a-f)
    189. ;   5  (5 bits: 0-9, a-v)
    190. ;   6  (6 bits: 0-9, a-z, A-Z, "-", ",")
    191. ; Default Value: 4
    192. ; Development Value: 5
    193. ; Production Value: 5
    194. ; http://php.net/session.hash-bits-per-character
    195. session.sid_bits_per_character = 5
    196.  
    197. ; Enable upload progress tracking in $_SESSION
    198. ; Default Value: On
    199. ; Development Value: On
    200. ; Production Value: On
    201. ; http://php.net/session.upload-progress.enabled
    202. ;session.upload_progress.enabled = On
    203.  
    204. ; Cleanup the progress information as soon as all POST data has been read
    205. ; (i.e. upload completed).
    206. ; Default Value: On
    207. ; Development Value: On
    208. ; Production Value: On
    209. ; http://php.net/session.upload-progress.cleanup
    210. ;session.upload_progress.cleanup = On
    211.  
    212. ; A prefix used for the upload progress key in $_SESSION
    213. ; Default Value: "upload_progress_"
    214. ; Development Value: "upload_progress_"
    215. ; Production Value: "upload_progress_"
    216. ; http://php.net/session.upload-progress.prefix
    217. ;session.upload_progress.prefix = "upload_progress_"
    218.  
    219. ; The index name (concatenated with the prefix) in $_SESSION
    220. ; containing the upload progress information
    221. ; Default Value: "PHP_SESSION_UPLOAD_PROGRESS"
    222. ; Development Value: "PHP_SESSION_UPLOAD_PROGRESS"
    223. ; Production Value: "PHP_SESSION_UPLOAD_PROGRESS"
    224. ; http://php.net/session.upload-progress.name
    225. ;session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"
    226.  
    227. ; How frequently the upload progress should be updated.
    228. ; Given either in percentages (per-file), or in bytes
    229. ; Default Value: "1%"
    230. ; Development Value: "1%"
    231. ; Production Value: "1%"
    232. ; http://php.net/session.upload-progress.freq
    233. ;session.upload_progress.freq =  "1%"
    234.  
    235. ; The minimum delay between updates, in seconds
    236. ; Default Value: 1
    237. ; Development Value: 1
    238. ; Production Value: 1
    239. ; http://php.net/session.upload-progress.min-freq
    240. ;session.upload_progress.min_freq = "1"
    241.  
    242. ; Only write session data when session data is changed. Enabled by default.
    243. ; http://php.net/session.lazy-write
    244. ;session.lazy_write = On
     
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.789
    Симпатии:
    646
    Молодец, нашел! Погладить по головке или похвалы достаточно? :)
     
  10. ubunta3.0

    ubunta3.0 Зэк
    [ БАН ]

    С нами с:
    23 окт 2019
    Сообщения:
    22
    Симпатии:
    2
    там же нет того пути
    Я хочу понять почему путь другой приходит
     
  11. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.789
    Симпатии:
    646
    Раз путь «приходит» дефолтный, значит что-то в переопределении не работает. Ты вообще уверен, что твои обработчики выполняются, причем так, как должны?
    --- Добавлено ---
    P.S. Название темы неточное. Из-за этого я на тебя «наехал» (в уже стертом сообщении).
     
  12. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Я считаю это вполне нормальным положением дел.

    Ларавель исходно заявлен как швейцарский нож для веб-артизанов :D

    Да и вообще, ООП и Composer и были созданы, чтобы разработчик мог делать готовые продукты достойного качества, не вникая в нюансы программирования как такового.

    Я знал одного ларавельщика, весьма компетентного в своей области, который от меня впервые услышал о существовании функции print_r(), серьезно :D

    И для меня это был момент истины - я понял, что программирование стало совсем другим, чем 20 лет назад.

    К сожалению, я этот момент как-то пропустил (я последние годы вообще разработкой занимался постольку-поскольку, а например, баллотировался в депутаты, и делал другие прикольные штуки))))))))) - приходится вот постепенно наверстывать.
    --- Добавлено ---
    это потому что тебе не платят за разработку и не ставят жесткие сроки выполнения задачи

    если бы ты занялся реальной коммерческой разработкой - у тебя совсем другой подход был к вопросу

    не осталось бы времени на глупости :D
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    Ага, а потом попадается задача, которая выходит за то, что уже реализована кем-то, и такой программист сядет в лужу.

    Всё, что я могу сделать на Laravel, я могу сделать и без него. Если мне скажут завтра на симфони чего смастерить, я смастерю, хотя симфони сейчас знаю поверхностно (мне не нравится). Нужно будет сделать что-то ещё на каком-то фреймворке - главное, чтоб была документация. Потому что я более-менее знаю основы, это обязательное требование. Уметь решать простейшие задачи на знание языка - обязательно. А потом уже все эти примочки, типа Laravel.
     
  14. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Ничего страшного )) каждый из нас не раз садился в лужу)) это нормально, это жизнь)))))
     
  15. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    будешь дергать лишь одни рычаги, никогда не обуздаешь что под капотом !
     
  16. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Смотря какие цели перед собой ставить. И какие есть возможности.

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

    А если целью ставится побыстрее освоить навык веб-разработки с целью просто зарабатывать на этом какие-то деньги - лучше начать сразу с Laravel, а уже потом по ходу подтягивать базовые знания.

    Это такой "американский" подход)) в противоположность "советскому", когда людям отбивали способность к обучению навязывая изучение совершенно бесполезных навыков под эгидой "расширения кругозора")))
     
  17. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    другим ?
    Есть люди, которые осмысляют что делают.
    Есть китайцы-копипастеры, которых научили что-то конкретному и не сворачивая куда-либо.
     
  18. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    А это зачастую и не нужно.

    На рынке умники особо не нужны сейчас -)

    Есть спрос на конкретные узкие специальности.

    Если ты закончил ПТУ и хорошо знаешь Laravel - ты легко найдешь работу > 100k RUR и заказы на разработку.

    А если ты имеешь высшее образование и умеешь писать офигенные велосипеды - то это 1 евро в час :D как у сами знаете кого.
    --- Добавлено ---
    Вот поэтому Китай и рулит в мире :)

    //пойду кормить котов своих))
     
  19. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Китай не рулит в мире. Достаточно закрыть поставки ARM чипов с британии и всему миру RIP
     
  20. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    Есть опыт работы с таким программистом. Ни на какие 100k он не тянет, конечно. Поскольку если задача выходит за рамки того, что ты показал как пример кода, то он становится в тупик.
     
  21. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    Нет, не найдёшь. Потому что на нормальную зарплату требуют не только знание ларавеля, но и знаний оптимизации. Мне вот лично нах не нужен ларавельщик, у которого страница будет открываться полгода, а не долю секунды. А всё потому, что бездумно модели херачит.
     
  22. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Тебе не нужен, а кому-то другому может сойдет и так.

    Тут ведь любой скилл нарабатывается опытом.

    Если с него оптимизацию не требовали - он на нее и не заморачивался.

    А коли будет стимул - так изучит.

    Я вообще удивляюсь что мне приходится прописные истины обосновывать в общении с такими опытными разработчиками.
     
  23. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    Может поэтому ты пока и не опытный разработчик, не думал?
    Если опытные разработчики хором тебе говорят одно, а у тебя другое мнение, это всё-таки повод усомниться в своей правоте.
     
  24. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    @ubunta3.0 Поясни почему ты решил, что путь изменяется?

    Какой путь тобой (т.е. Котеровым) указан, такой и используется. Ты неправильно понимаешь сообщение об ошибке.

    Замени в стр. 24
    return @file_get_contents($fname);
    на
    return @file_get_contents($fname) ?: '';

    если сообщение об ошибке исчезнет и всё заработает, проанализируй что изменилось и почему. дойди до этого своей головой без подсказок.
     
  25. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Я весьма опытный разработчик. Чисто по факту ))

    Другое дело, что я не разработчик всё время своей жизни. У меня за те 20 лет что я делаю сайты, бывали года, когда я не написал ни единой строчки кода - были другие занятия и устремления.

    Нет, это просто от вашего непонимания того, что акцент на практическом изучении современного PHP вовсе не подразумевает отказ от всего остального.

    Повторюсь: это та самая "советская" бинарная логика, которая привита населению этой страны еще 100 лет назад, и передается через образовательную систему.

    То есть, там, где надо ставить AND или OR - вы ставите XOR - это такая базовая логическая ошибка, которую я встречаю в людях повсеместно всю свою долгую жизнь.

    Это кстати тоже один из паттернов, вернее - антипаттернов социального программирования биороботов (aka Homo sapiens)

    Ошибка в коде, и ничего личного.

    :)