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): <?php ## Переопределение обработчиков сессии. // Возвращает полное имя файла временного хранилища сессии. // В случае, если нужно изменить тот каталог, в котором должны // храниться сессии, достаточно поменять только эту функцию function ses_fname($key) { return dirname(__FILE__)."/sessiondata/".session_name()."/$key"; } // Заглушки - эти функции просто ничего не делают function ses_open($save_path, $ses_name) { return true; } function ses_close() { return true; } // Чтение данных из временного хранилища function ses_read($key) { // Получаем имя файла и открываем файл. $fname = ses_fname($key); return @file_get_contents($fname); } // Запись данных сессии во временное хранилище function ses_write($key, $val) { $fname = ses_fname($key); // Сначала создаем все каталоги (в случае, если они уже есть, // игнорируем сообщения об ошибке) @mkdir(dirname(dirname($fname)), 0777); @mkdir(dirname($fname), 0777); // Создаем файл и записываем в него данные сессии. @file_put_contents($fname, $val); return true; } // Вызывается при уничтожении сессии function ses_destroy($key) { return @unlink(ses_fname($key)); } // Сборка мусора - ищем все старые файлы и удаляем их function ses_gc($maxlifetime) { $dir = ses_fname("."); // Получаем доступ к каталогу текущей группы сессии. foreach (glob("$dir/*") as $fname) { // Файл слишком старый? if (time() - filemtime($fname) >= $maxlifetime) { @unlink($fname); continue; } } // Если директория непуста, она не удалится - будет предупреждение. // Мы его подавляем. Если же пуста - удалится, что нам и нужно. @rmdir($dir); return true; } // Регистрируем наши новые обработчики session_set_save_handler( "ses_open", "ses_close", "ses_read", "ses_write", "ses_destroy", "ses_gc" ); // Для примера подключаемся к группе сессий test. session_name("test1"); session_start(); // Увеличиваем счетчик в сессии. $_SESSION['count'] = @$_SESSION['count'] + 1; ?> <h2>Счетчик</h2> В текущей сессии работы с браузером Вы открыли эту страницу <?=$_SESSION['count']?> раз(а).<br> Закройте браузер, чтобы обнулить счетчик.<br> <a href="<?=$_SERVER['SCRIPT_NAME']?>" target="_blank">Открыть дочернее окно браузера</a>. /var/lib/php/sessions она слздается тут а должна создаваться /var/www/php.xxx/session/sessiondata/test1/8k2ji6s3v425hqi932thtq7dnu var_dump($fname); так даже показал
Убунта, а чего ты просто не займешься изучением программирования? Охота тебе время на всю эту байду тратить? Можно ведь прекрасно без этого всего обойтись. Посмотри видеоуроки по основам Laravel. Смастери на его основе простенькую CMS. Это намного полезнее и приятнее чем в таких заморочках барахтаться. Ты не с того начал вообще.
Да это все прошлый век же вот: PHP: public function index() { $users = DB::table('users')->paginate(15); return view('user.index', ['users' => $users]); } PHP: <div class="container"> @foreach ($users as $user) {{ $user->name }} @endforeach </div> {{ $users->links() }} всё Понимаешь, все эти "напиши калькулятор" - это для дебилов, которым больше заняться нечем студентов, чьи преподы так и не научились преподавать, увы и ах.
Как имеем армию Wordpress-ников, не умеющих программировать без плагинов, так теперь к ним имеем армию Laravel-щиков, не умеющих программировать без Laravel.
Код (Text): [Session] ; Handler used to store/retrieve data. ; http://php.net/session.save-handler session.save_handler = files ; Argument passed to save_handler. In the case of files, this is the path ; where data files are stored. Note: Windows users have to change this ; variable in order to use PHP's session functions. ; ; The path can be defined as: ; ; session.save_path = "N;/path" ; ; where N is an integer. Instead of storing all the session files in ; /path, what this will do is use subdirectories N-levels deep, and ; store the session data in those directories. This is useful if ; your OS has problems with many files in one directory, and is ; a more efficient layout for servers that handle many sessions. ; ; NOTE 1: PHP will not create this directory structure automatically. ; You can use the script in the ext/session dir for that purpose. ; NOTE 2: See the section on garbage collection below if you choose to ; use subdirectories for session storage ; ; The file storage module creates files using mode 600 by default. ; You can change that by using ; ; session.save_path = "N;MODE;/path" ; ; where MODE is the octal representation of the mode. Note that this ; does not overwrite the process's umask. ; http://php.net/session.save-path ;session.save_path = "/var/lib/php/sessions" ; Whether to use strict session mode. ; Strict session mode does not accept uninitialized session ID and regenerate ; session ID if browser sends uninitialized session ID. Strict mode protects ; applications from session fixation via session adoption vulnerability. It is ; disabled by default for maximum compatibility, but enabling it is encouraged. ; https://wiki.php.net/rfc/strict_sessions session.use_strict_mode = 0 ; Whether to use cookies. ; http://php.net/session.use-cookies session.use_cookies = 1 ; http://php.net/session.cookie-secure ;session.cookie_secure = ; This option forces PHP to fetch and use a cookie for storing and maintaining ; the session id. We encourage this operation as it's very helpful in combating ; session hijacking when not specifying and managing your own session id. It is ; not the be-all and end-all of session hijacking defense, but it's a good start. ; http://php.net/session.use-only-cookies session.use_only_cookies = 1 ; Name of the session (used as cookie name). ; http://php.net/session.name session.name = PHPSESSID ; Initialize session on request startup. ; http://php.net/session.auto-start session.auto_start = 0 ; Lifetime in seconds of cookie or, if 0, until browser is restarted. ; http://php.net/session.cookie-lifetime session.cookie_lifetime = 0 ; The path for which the cookie is valid. ; http://php.net/session.cookie-path session.cookie_path = / ; The domain for which the cookie is valid. ; http://php.net/session.cookie-domain session.cookie_domain = ; Whether or not to add the httpOnly flag to the cookie, which makes it inaccessible to browser scripting languages such as JavaScript. ; http://php.net/session.cookie-httponly session.cookie_httponly = ; Handler used to serialize data. php is the standard serializer of PHP. ; http://php.net/session.serialize-handler session.serialize_handler = php ; Defines the probability that the 'garbage collection' process is started ; on every session initialization. The probability is calculated by using ; gc_probability/gc_divisor. Where session.gc_probability is the numerator ; and gc_divisor is the denominator in the equation. Setting this value to 1 ; when the session.gc_divisor value is 100 will give you approximately a 1% chance ; the gc will run on any give request. ; Default Value: 1 ; Development Value: 1 ; Production Value: 1 ; http://php.net/session.gc-probability session.gc_probability = 0 ; Defines the probability that the 'garbage collection' process is started on every ; session initialization. The probability is calculated by using the following equation: ; gc_probability/gc_divisor. Where session.gc_probability is the numerator and ; session.gc_divisor is the denominator in the equation. Setting this value to 1 ; when the session.gc_divisor value is 100 will give you approximately a 1% chance ; the gc will run on any give request. Increasing this value to 1000 will give you ; a 0.1% chance the gc will run on any give request. For high volume production servers, ; this is a more efficient approach. ; Default Value: 100 ; Development Value: 1000 ; Production Value: 1000 ; http://php.net/session.gc-divisor session.gc_divisor = 1000 ; After this number of seconds, stored data will be seen as 'garbage' and ; cleaned up by the garbage collection process. ; http://php.net/session.gc-maxlifetime session.gc_maxlifetime = 1440 ; NOTE: If you are using the subdirectory option for storing session files ; (see session.save_path above), then garbage collection does *not* ; happen automatically. You will need to do your own garbage ; collection through a shell script, cron entry, or some other method. ; For example, the following script would is the equivalent of ; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes): ; find /path/to/sessions -cmin +24 -type f | xargs rm ; Check HTTP Referer to invalidate externally stored URLs containing ids. ; HTTP_REFERER has to contain this substring for the session to be ; considered as valid. ; http://php.net/session.referer-check session.referer_check = ; Set to {nocache,private,public,} to determine HTTP caching aspects ; or leave this empty to avoid sending anti-caching headers. ; http://php.net/session.cache-limiter session.cache_limiter = nocache ; Document expires after n minutes. ; http://php.net/session.cache-expire session.cache_expire = 180 ; trans sid support is disabled by default. ; Use of trans sid may risk your users' security. ; Use this option with caution. ; - User may send URL contains active session ID ; to other person via. email/irc/etc. ; - URL that contains active session ID may be stored ; in publicly accessible computer. ; - User may access your site with the same session ID ; always using URL stored in browser's history or bookmarks. ; http://php.net/session.use-trans-sid session.use_trans_sid = 0 ; Set session ID character length. This value could be between 22 to 256. ; Shorter length than default is supported only for compatibility reason. ; Users should use 32 or more chars. ; http://php.net/session.sid-length ; Default Value: 32 ; Development Value: 26 ; Production Value: 26 session.sid_length = 26 ; The URL rewriter will look for URLs in a defined set of HTML tags. ; <form> is special; if you include them here, the rewriter will ; add a hidden <input> field with the info which is otherwise appended ; to URLs. <form> tag's action attribute URL will not be modified ; unless it is specified. ; Note that all valid entries require a "=", even if no value follows. ; Default Value: "a=href,area=href,frame=src,form=" ; Development Value: "a=href,area=href,frame=src,form=" ; Production Value: "a=href,area=href,frame=src,form=" ; http://php.net/url-rewriter.tags session.trans_sid_tags = "a=href,area=href,frame=src,form=" ; URL rewriter does not rewrite absolute URLs by default. ; To enable rewrites for absolute pathes, target hosts must be specified ; at RUNTIME. i.e. use ini_set() ; <form> tags is special. PHP will check action attribute's URL regardless ; of session.trans_sid_tags setting. ; If no host is defined, HTTP_HOST will be used for allowed host. ; Example value: php.net,www.php.net,wiki.php.net ; Use "," for multiple hosts. No spaces are allowed. ; Default Value: "" ; Development Value: "" ; Production Value: "" ;session.trans_sid_hosts="" ; Define how many bits are stored in each character when converting ; the binary hash data to something readable. ; Possible values: ; 4 (4 bits: 0-9, a-f) ; 5 (5 bits: 0-9, a-v) ; 6 (6 bits: 0-9, a-z, A-Z, "-", ",") ; Default Value: 4 ; Development Value: 5 ; Production Value: 5 ; http://php.net/session.hash-bits-per-character session.sid_bits_per_character = 5 ; Enable upload progress tracking in $_SESSION ; Default Value: On ; Development Value: On ; Production Value: On ; http://php.net/session.upload-progress.enabled ;session.upload_progress.enabled = On ; Cleanup the progress information as soon as all POST data has been read ; (i.e. upload completed). ; Default Value: On ; Development Value: On ; Production Value: On ; http://php.net/session.upload-progress.cleanup ;session.upload_progress.cleanup = On ; A prefix used for the upload progress key in $_SESSION ; Default Value: "upload_progress_" ; Development Value: "upload_progress_" ; Production Value: "upload_progress_" ; http://php.net/session.upload-progress.prefix ;session.upload_progress.prefix = "upload_progress_" ; The index name (concatenated with the prefix) in $_SESSION ; containing the upload progress information ; Default Value: "PHP_SESSION_UPLOAD_PROGRESS" ; Development Value: "PHP_SESSION_UPLOAD_PROGRESS" ; Production Value: "PHP_SESSION_UPLOAD_PROGRESS" ; http://php.net/session.upload-progress.name ;session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS" ; How frequently the upload progress should be updated. ; Given either in percentages (per-file), or in bytes ; Default Value: "1%" ; Development Value: "1%" ; Production Value: "1%" ; http://php.net/session.upload-progress.freq ;session.upload_progress.freq = "1%" ; The minimum delay between updates, in seconds ; Default Value: 1 ; Development Value: 1 ; Production Value: 1 ; http://php.net/session.upload-progress.min-freq ;session.upload_progress.min_freq = "1" ; Only write session data when session data is changed. Enabled by default. ; http://php.net/session.lazy-write ;session.lazy_write = On
Раз путь «приходит» дефолтный, значит что-то в переопределении не работает. Ты вообще уверен, что твои обработчики выполняются, причем так, как должны? --- Добавлено --- P.S. Название темы неточное. Из-за этого я на тебя «наехал» (в уже стертом сообщении).
Я считаю это вполне нормальным положением дел. Ларавель исходно заявлен как швейцарский нож для веб-артизанов Да и вообще, ООП и Composer и были созданы, чтобы разработчик мог делать готовые продукты достойного качества, не вникая в нюансы программирования как такового. Я знал одного ларавельщика, весьма компетентного в своей области, который от меня впервые услышал о существовании функции print_r(), серьезно И для меня это был момент истины - я понял, что программирование стало совсем другим, чем 20 лет назад. К сожалению, я этот момент как-то пропустил (я последние годы вообще разработкой занимался постольку-поскольку, а например, баллотировался в депутаты, и делал другие прикольные штуки))))))))) - приходится вот постепенно наверстывать. --- Добавлено --- это потому что тебе не платят за разработку и не ставят жесткие сроки выполнения задачи если бы ты занялся реальной коммерческой разработкой - у тебя совсем другой подход был к вопросу не осталось бы времени на глупости
Ага, а потом попадается задача, которая выходит за то, что уже реализована кем-то, и такой программист сядет в лужу. Всё, что я могу сделать на Laravel, я могу сделать и без него. Если мне скажут завтра на симфони чего смастерить, я смастерю, хотя симфони сейчас знаю поверхностно (мне не нравится). Нужно будет сделать что-то ещё на каком-то фреймворке - главное, чтоб была документация. Потому что я более-менее знаю основы, это обязательное требование. Уметь решать простейшие задачи на знание языка - обязательно. А потом уже все эти примочки, типа Laravel.
Смотря какие цели перед собой ставить. И какие есть возможности. Если есть возможность и желание годами ковыряться во всей этой лаже, как это делает Убунту - не вопрос. А если целью ставится побыстрее освоить навык веб-разработки с целью просто зарабатывать на этом какие-то деньги - лучше начать сразу с Laravel, а уже потом по ходу подтягивать базовые знания. Это такой "американский" подход)) в противоположность "советскому", когда людям отбивали способность к обучению навязывая изучение совершенно бесполезных навыков под эгидой "расширения кругозора")))
другим ? Есть люди, которые осмысляют что делают. Есть китайцы-копипастеры, которых научили что-то конкретному и не сворачивая куда-либо.
А это зачастую и не нужно. На рынке умники особо не нужны сейчас -) Есть спрос на конкретные узкие специальности. Если ты закончил ПТУ и хорошо знаешь Laravel - ты легко найдешь работу > 100k RUR и заказы на разработку. А если ты имеешь высшее образование и умеешь писать офигенные велосипеды - то это 1 евро в час как у сами знаете кого. --- Добавлено --- Вот поэтому Китай и рулит в мире //пойду кормить котов своих))
Есть опыт работы с таким программистом. Ни на какие 100k он не тянет, конечно. Поскольку если задача выходит за рамки того, что ты показал как пример кода, то он становится в тупик.
Нет, не найдёшь. Потому что на нормальную зарплату требуют не только знание ларавеля, но и знаний оптимизации. Мне вот лично нах не нужен ларавельщик, у которого страница будет открываться полгода, а не долю секунды. А всё потому, что бездумно модели херачит.
Тебе не нужен, а кому-то другому может сойдет и так. Тут ведь любой скилл нарабатывается опытом. Если с него оптимизацию не требовали - он на нее и не заморачивался. А коли будет стимул - так изучит. Я вообще удивляюсь что мне приходится прописные истины обосновывать в общении с такими опытными разработчиками.
Может поэтому ты пока и не опытный разработчик, не думал? Если опытные разработчики хором тебе говорят одно, а у тебя другое мнение, это всё-таки повод усомниться в своей правоте.
@ubunta3.0 Поясни почему ты решил, что путь изменяется? Какой путь тобой (т.е. Котеровым) указан, такой и используется. Ты неправильно понимаешь сообщение об ошибке. Замени в стр. 24 return @file_get_contents($fname); на return @file_get_contents($fname) ?: ''; если сообщение об ошибке исчезнет и всё заработает, проанализируй что изменилось и почему. дойди до этого своей головой без подсказок.
Я весьма опытный разработчик. Чисто по факту )) Другое дело, что я не разработчик всё время своей жизни. У меня за те 20 лет что я делаю сайты, бывали года, когда я не написал ни единой строчки кода - были другие занятия и устремления. Нет, это просто от вашего непонимания того, что акцент на практическом изучении современного PHP вовсе не подразумевает отказ от всего остального. Повторюсь: это та самая "советская" бинарная логика, которая привита населению этой страны еще 100 лет назад, и передается через образовательную систему. То есть, там, где надо ставить AND или OR - вы ставите XOR - это такая базовая логическая ошибка, которую я встречаю в людях повсеместно всю свою долгую жизнь. Это кстати тоже один из паттернов, вернее - антипаттернов социального программирования биороботов (aka Homo sapiens) Ошибка в коде, и ничего личного.