Who can provide the PHP detailed learning path?

Source: Internet
Author: User
Tags apc epoll php basics mysql backup install redis
I am like switching from the front-end to the back-end. Who can provide a detailed PHP learning route? (I have read a lot of the routes on the Internet, but I am confused) hope you can give me some advice ~ I am like switching from the front-end to the back-end. Who can provide a detailed PHP learning route? (I have read a lot of the routes on the Internet, but I am confused) hope you can give me some advice ~

Reply content:

I am like switching from the front-end to the back-end. Who can provide a detailed PHP learning route? (I have read a lot of the routes on the Internet, but I am confused) hope you can give me some advice ~

According to the development tracks of many PHP/LNMP programmers and their personal experience, this article abstracts many programmers who are confused about the future, especially those who are blind and confused about technology learning, the technical requirements of PHP programmers at each stage are summarized to help many PHP programs compare and set learning and growth goals.

I made a basic analysis of the current mainstream technologies. The whole process is based on the assumption that PHP programmers do not have a very solid foundation, and all the settings are very specific and clear, it may make people feel uncomfortable. Please understand that it only represents the words of the family. (Future technological changes will not be discussed)

Phase 1: Basic stage (Basic PHP programmer)

Focus: Get familiar with LNMP (the core is the basic installation and configuration operations)

Objective: to install and maintain the basic LNMP system, develop PHP for the basic simple system, and develop a PHP function module in the PHP medium-sized system.

Time: the time needed to complete this phase varies from person to person. Some of them have grown over half a year, and some have grown slowly for two or three years.

1. Linux:

Basic commands, operations, startup, and basic service configurations (including rpm installation files and various service configurations); write simple shell scripts and awk/sed script commands.

2. Nginx:

Install and configure nginx + php, know the basic nginx core configuration options, and know the basic configurations such as server/fastcgi_pass/access_log. The goal is to make nginx + php_fpm work smoothly.

3. MySQL:

Will build mysql by yourself, know the basic mysql configuration options, know the differences between innodb and myisam, know the different configuration options for the InnoDB and MyISAM engines; know the differences between the two basic engines and select the above differences; Be able to manually build a MySQL database and configure the encoding to run normally and stably; the core objective is to build a runable MySQL database.

4. PHP:

Basic syntax array, String, database, XML, Socket, GD/ImageMgk image processing, etc. Familiar with various APIs connected to MySQL (mysql/mysqli/PDO ), know how to solve various coding problems; know the common PHP frameworks (ThinkPHP, Zendframework, Yii, Yaf, etc.); understand the basic MVC operating mechanism and why, know the differences between different PHP frameworks; be able to quickly learn an MVC framework. Be aware of the file directory organization in the development project, have a basic good code structure and style, and can complete the development of a small system and a module in a medium-sized system.

5. Front-end:

If the condition time permits, you can learn relevant knowledge such as HTML, CSS, and JS, know what web standards are, and know the difference between HTML5 and HTML4 in the web/wap page mode of p + css; to learn about some basic front-end and JS frameworks (such as jQuery), and some basic JavaScript programming knowledge, (this item is not a required item. If you have time, you can take a look at it, however, we do not recommend that you focus on it unless you are strongly interested)

6. System Design:

Able to complete the basic design of small systems, including simple database design, and complete the basic design and development of the browser-> Nginx + PHP-> database architecture; supporting the development and maintenance of hundreds of thousands to millions of websites each day;

Stage 2: Improvement stage (intermediate PHP programmer)

Key points: Improve LNMP-specific skills and be able to use LNMP more comprehensively.

Objective: To build an LNMP environment anytime, anywhere, and quickly complete routine configuration; to trace and solve most of the problems encountered in development and online environments; to independently undertake the architecture and development of medium-sized systems; ability to develop a medium-sized module in a large system;

1. Linux:

On the basis of the first stage, we can smoothly use Shell scripts to complete a lot of automated work. awk/sed/perl is also well-operated and can complete a lot of text processing and data statistics; basically can install most non-special Linux programs (including various libraries, packages, third-party dependencies, such as MongoDB/Redis/Sphinx/Luncene/SVN); understand basic Linux services, know how to view the performance indicator data of Linux and how to track issues under Linux.

2. Nginx:

On the basis of the first stage, learn more about complicated Nginx configurations, including multi-core configurations, events, proxy_pass, sendfile/tcp _ * configurations, and related configurations and performance impact such as timeout; know that nginx not only supports web server, but also supports proxy server and reverse static server configurations, know basic nginx configuration optimization, know how to configure permissions, compile an nginx extension to nginx; know the basic operating principles of nginx (master/worker mechanism, epoll), and know why nginx has better performance than apache;

3. MySQL/MongoDB:

On the basis of the first stage, I have mastered many tips in MySQL development, including regular SQL optimization (group by/order by/rand optimization). Apart from setting up MySQL, mySQL data can be backed up in hot and cold ways, and configuration options that affect innodb/myisam performance are also known (such as key_buffer/query_cache/sort_buffer/innodb_buffer_pool_size/innodb_flush_log_at_trx_commit ), you also know the value of these options. You also know some special configuration options, such as how to set up the mysql master-slave synchronization environment and the differences between binlog_format; know the performance tracing of MySQL, including slow_log/explain, and the basic indexing and processing knowledge. Learn about the basic MySQL architecture (Server + storage engine) in terms of principles ), know the basic InnoDB/MyISAM index Storage Structure and differences (Clustering Index, B-tree); know the basic InnoDB Transaction Processing Mechanism; understand the processing scheme for most MySQL exceptions (or know where to find the processing scheme ). If conditions permit, it is recommended that you understand the MongoDB database represented by NoSQL. By the way, we compare the differences with MySQL. Colleagues can use MongoDB safely and cautiously in appropriate application scenarios, understand the basic development of PHP and MongoDB.

4. Redis/Memcached:

In most medium-sized systems, cache processing is required. Therefore, you must understand the basic cache. You must be aware of the similarities and differences between Memcached and Redis, and be able to install Redis/Memcached independently, understand some basic features and restrictions of Memcahed, such as the maximum value, and know how PHP works with them. Redis understands basic working principles and usage, and understands common data types, know what scenarios and types of applications, understand Redis transactions, and so on. In principle, we can get a rough idea of Memcached's memory structure (slab mechanism), and redis will understand the underlying storage structure (SDS/linked list/SkipList/HashTable) of common data types, by the way, it is better to understand Redis's transaction, RDB, AOF, and other mechanisms.

5. PHP:

In addition to the capabilities of the first stage, PHP and various third-party extensions can be installed at will in terms of installation configuration; understand most of the configuration options and meanings of php-fpm (such as max_requests/max_children/request_terminate_timeout and other factors that affect performance), and know the differences between mod_php and fastcgi; I have already been familiar with various basic technologies in PHP, as well as a variety of in-depth PHP, including in-depth understanding of PHP object-oriented/SPL/special features at the syntax level, such as reflection; I have read at least one common PHP MVC framework code in the framework, and understand the internal implementation mechanism and Design Concept of the basic PHP framework; in PHP development, you have been able to use regular design patterns for application development (Abstract Factory/Singleton/Observer/command chain/policy/adapter ); we recommend that you develop your own php mvc framework to fully enable development liberalization, so that you can deeply understand the MVC model and quickly upgrade your business project development. You are familiar with various PHP code optimization methods, familiar with solving most PHP security problems; familiar with basic PHP Execution mechanism principles (Zend engine/basic Extension Working mechanism );

6. C/C ++:

He started to explore certain C/C ++ languages and was able to write basic C/C ++ code, familiar with basic C/C ++ syntaxes (pointers, Array Operations, strings, and standard APIs) and data structures (linked list, tree, hash, and queue; have a basic understanding of the C language development concepts in Linux, write simple makefile files, and be able to compile and debug a simple GCC/GDB program; have a rough understanding of basic network programming. (This project aims to lay the foundation for a higher level)

7. Front-end:

On the basis of the first stage, familiarize yourself with the basic HTTP protocol (protocol code 200/300/400/500, basic HTTP interaction headers). conditions allow, you can write in depth a slightly elegant HTML + CSS + JavaScript, or you can simply use some front-end frameworks (such as jQuery/YUI/ExtJS/RequireJS/BootStrap). if conditions permit, you can learn JavaScript programming in depth, such as the closure mechanism and DOM processing, and read jQuery source code for further study. (This project does not focus on learning unless you are interested in the frontend)

8. System Design:

Ability to design the website architecture, database, and basic PHP framework selection for most medium-sized systems; performance testing and troubleshooting; ability to complete similar tasks: browser-> CDN (Squid) -> Nginx + PHP-> cache-> basic design, development, and maintenance of database structure websites; supporting the development and maintenance of basic websites with millions to tens of millions of traffic per day;

Stage 3: Advanced (Advanced PHP programmer)

Important: in addition to the basic LNMP program, you can also have in-depth learning in a certain direction or field. (In-depth Development)

Objective: In addition to basic PHP business development, it can also solve most in-depth and complex technical problems and independently design medium and large system design and development; I am able to independently hold a certain technical direction, which is relatively professional. (For example, in-depth research on MySQL, Nginx, PHP, Redis, etc)

1. Linux:

In addition to the capabilities of the second stage, in addition to routine operations and performance monitoring tracking in Linux, you can also use a lot of advanced and complex commands to complete the work (watch/tcpdump/starce/ldd/ar). In terms of shell scripts, it has been able to write more complex shell scripts (more than 500 lines) to assist with a lot of shells including backup, automated processing, monitoring, and other work; awk, sed, perl, and other applications have been very popular, allowing you to control and process text statistics and analyze data in various complex formats at will. You have some knowledge about Linux internal mechanisms and load kernel modules, start error handling and so on. At the same time, you can understand other related things, such as NFS and disk management;

2. Nginx:

On the basis of the second stage, we have been able to skillfully operate and maintain Nginx, such as monitoring, performance optimization, and complex problem handling; if you look at your personal interests, you can focus on the in-depth study of the working principles of Nginx, mainly starting from reading the source code, such as the specific master/worker working mechanism, nginx internal event processing, memory management, and so on. At the same time, you can learn about Nginx extension development and customize some of your own private extensions. At the same time, you can have a certain understanding of Nginx + Lua, check whether a better mode can be used in combination with the application. This stage requires an in-depth understanding of Nginx principles and can be considered as an in-depth professional in the Nginx field.

3. MySQL/MongoDB:

On the basis of the second stage, in terms of MySQL applications, in addition to the basic SQL optimization, some complex operations can be completed, such as importing and exporting large volumes of data, high-risk operations such as modifying the table structure or adding or deleting index fields of a large volume of online data. In addition to the installation and configuration, the system has been able to handle more complicated MySQL problems, such as tracing of various problems, master-slave synchronization latency, data synchronization across data centers, MySQL high-availability architecture, etc. Familiar with MySQL applications and key MySQL technologies, for example, the transaction mechanism (isolation level, lock, etc.), the trigger, partition and other technologies have a certain understanding and application, MySQL performance, including disk optimization (SAS migration to SSD) server optimization (memory, server configuration), other core performance optimization options (innodb_log_buffer_size/back_log/table_open_cache/thread_cache_size/innodb_lock_wait_timeout), and application selection for the connection pool software. How * (show status/show profile) Class operation statements have a deep understanding, can trace most of the performance issues; MySQL backup technology is familiar, including disaster recovery and recovery, deep understanding of Binlog, cold/hot backup, and multi-IDC backup. Learn more about MySQL principles, such as reading some source code about the working mechanism of MySQL, for example, you can learn the source code of the master-slave synchronization (replication) technology or the source code of a storage engine (MyISAM/Innodb/TokuDB). if conditions permit, you can refer to the CSV engine to develop your own simple storage engine to save some data and enhance your understanding of MySQL. In this process, if you are interested, you can also consider developing towards DBA. At the MongoDB level, you can consider, for example, starting to apply MongoDB online when writing less and reading more data, or performing online data analysis and processing operations. The specific scenarios can follow the work instructions, however, the core is to better understand the applications in different scenarios of RMDBS and NoSQL. If conditions or interests permit, you can start to learn more about the working mechanism of MongoDB.

4. Redis/Memcached:

On the basis of the second stage, we can further apply and learn. Because Memcached is not very complex, it is recommended that you read the source code, especially the memory management part, to facilitate in-depth understanding; Redis part, you can do more complex data structure applications (zset is used for ranking and sorting operations/transaction processing to ensure atomicity in scenarios such as seckilling ); design a highly available Redis application architecture and cluster for learning applications that involve synchronization mechanisms such as aof. It is recommended that you have a deep understanding of the Redis source code, the knowledge accumulated in the second stage can be applied. For more information, see core event management, memory management, and internal core data structure. If you are interested, you can become a very professional Redis user.

5. PHP:

As the basic core skills, we need to have more in-depth learning and application on the basis of the second stage. From the basic code application, it can solve 95% of the problems encountered in PHP development and understand most PHP skills. For most PHP frameworks, it can be quickly used within one day, understand the advantages and disadvantages of various mainstream PHP frameworks, and quickly facilitate technical selection in project development. In terms of configuration, besides the knowledge of the second stage, you will learn about some of the configuration options (php auto_prepend_file/auto_append_file), including some complex advanced configurations and principles of extensions (such as memcache in memcached extension configuration. apc in hash_strategy and apc extension configuration. mmap_file_mask/apc. slam_defense/apc. file_update_protection). I have a better understanding of the working mechanism of php, including the working mechanism of php-fpm (for example, php-fpm enables the calculation of the number of processes under different configuration machines and the principle ), familiar with the zend engine (vm/gc/stream processing), read Through the basic PHP kernel source code (or reading related articles), I understand most of the core data structures (basic type/Array/Object) of PHP internal mechanisms, have an in-depth understanding of the core infrastructure (zval, hashtable, and gc), be able to perform basic PHP extension development, and learn about some advanced extensions (minit, rinit, and so on ), familiar with the details of different communication and interaction modes (mod_php/fastcgi) between php and apache/nginx. In addition to developing PHP extensions, you can consider learning to develop Zend extensions to learn more about PHP at the lower layer.

6. C/C ++:

On the basis of the second stage, you can have a deeper understanding of the C/C ++ language and complete the development of small and medium C/C ++ systems; in addition to the basic C/C ++ syntax and data structure of the second stage, you can also learn some special data structures (B-tree/rb-tree/skiplist/lsm-tree/trie-tree) to meet your needs in special work. In terms of system programming, be familiar with multi-process and multi-thread programming. In the multi-process scenario, we will learn about the communication modes among most of the multi-process processes, and be able to flexibly select the communication modes (shared memory, semaphores, and pipelines ); multi-threaded programming can effectively solve lock conflicts and debug multi-threaded programs. It is also familiar with network programming, understand the differences and selection of multi-process model, multi-thread model, and Asynchronous Network I/O model. Be familiar with the principles and differences of different Asynchronous Network I/O models (select/poll/epoll/iocp ), familiar with common asynchronous frameworks (ACE/ICE/libev/libevent/libuv/Boost. ASIO) and usage. If you are free to use it, you can also look at some libraries developed by yourself in China (such as muduo ); at the same time, it can design a high-concurrency program architecture (such as leader-follow/master-worker ); measure the test taker's understanding about most of the problems (memory management, log printing, high concurrency, frontend and backend communication protocols, and service monitoring) in C/C ++ backend Server development ), understand the RPC communication problems of various backend services (struct/http/thirft/protobuf, etc.); Be familiar with using GCC and GDB to develop compilation and debugging programs, after the core of the online program is lost, it can quickly trace and solve the problem. In terms of general module development, you can accumulate or develop some common tools or libraries (such as Asynchronous Network Framework, logstore, memory pool, thread pool, etc.). However, you should be cautious when using the tools or libraries after development, provincial traps to catch bugs;

7. Front-end:

Gain an in-depth understanding of the HTTP protocol (including the code and the reasons behind the special protocols, such as 302 static File Cache and 502 php suspension after nginx ); in addition to the various front-end framework application integration capabilities, if you are interested in front-end learning, you can develop some front-end frameworks similar to jQuery, or develop a Rich Text Editor and other trivial tests of JavaScript skill;

8. Language Learning in other fields:

It has a basic accumulation in the basic PHP/C ++ language. It is recommended that you try to learn different programming languages and look at your hobbies at the current stage, you can learn Python, Ruby, and other script languages. For functional programming languages, try Lisp, Haskell, Scala, and Erlang. For static languages, try Java or Golang, data Statistics and analysis can help you understand the R language. If you want to use backend services from another perspective, try Node. js also includes Nginx_Lua, Which is used with Nginx. To learn different languages, you can improve your horizons and solve the problems. For example, you can learn about the lightweight coroutine in addition to processes/Threads. For example, in cross-machine communication scenarios, the Erlang solution is simple and amazing. For example, if you don't want to select C/C ++, there are also highly efficient Erlang/Golang availability and so on. The main purpose is to improve your vision.

9. Other Majors:

In this phase, apart from the basic LNMP skills, some other fields of knowledge will be considered for learning. These are all possible, depending on personal interests and long-term objectives. Currently, many fields can be selected, such as cloud computing (distributed storage, distributed computing, virtual machines, etc.), machine learning (data mining, pattern recognition, etc, applied to statistics and personalized recommendations, Natural Language Processing (Chinese word segmentation, etc.), search engine technology, graphic images, speech recognition, and so on. In addition to these high-performance systems, there are also many engineering aspects to learn from, such as high-performance systems, mobile development (Android/IOS), computer security, embedded systems, hardware and other directions.

10. System Design:

On the basis of the second stage, the system design can be applied to master experience and skills to design complicated medium and large systems, which can solve various online complex system problems, complete similar browser-> CDN-> Server Load balancer-> access layer-> Nginx + PHP-> service cache-> database-> various complex backend RPC interactions (storage backend, logical backend, anti-cheating) backend and external services) -> more complex backend services with soy sauce; support normal development and maintenance of websites with tens of millions to hundreds of millions of traffic per day.

This article answers an article from the dark passers-by: The technical growth plan of PHP programmers

  • First, learn the basic syntax.String,ArrayFunctionFor more information, see here., Master at least 20 functions)

  • Learn more about mysql database (BasicAdd, delete, modify, and query)

  • Try to make a small project of the message book by yourself,This step can be successful, so I am very excited that I can't sleep at night.(Database connection, form submission, data traversal, data insertion, and data modification)

  • Try to build a blog project by yourself,It is critical that this step can be successful.(Imitating wordpress)

  • Basic Linux operations (directory operations, file operations, to the extent that the lamp environment can be installed using yum)

  • Understand OOP Programming

  • Learning Framework, you can develop programs (ThinkPHP, CI)

  • In this step, you can find a job and continue the following learning at work.

  • Configuration of various environments in Linux

  • In-depth OOP programming and self-writing simple frameworks

It seems to be a long journey. I will not talk about it below. I do not need to be guided by others to learn this step. I have enough judgment.

If you want to learn more about PHP, you can refer to more mature training institutions and their PHP learning courses. From entry level to intermediate level and advanced level, they will have very specific and detailed introductions and learning routes. It's not that you must follow what they say, but that at least I know my position and do my best to do the best.

The PHP course system of the two training institutions is listed below:

  • The PHP course system of the brothers training institution contains more detailed course arrangements. You can take a look at it in detail. View

  • The PHP learning roadmap of Chuanzhi podcast (version 2015) contains some videos, which are quite good. Let's take a look. View

Of course, you think this is not enough. You can also take a look at the widely-spread PHP Mind Map on the Internet. You can download it here.

If yes ~~, If you think I want to become a very Modern PHP developer, you can take a look at the Modern PHP Mind Map below. Please download it here.

Finally, although there are so many posts, do not be trapped by these so-called maps and course systems. I mean, do not follow the steps, but follow the gradual process. Most of the time, we cannot go from 1/2 to 3. Sometimes it may start from 3 at once, and then you can look back at 1/2 again. However, at least I know where I am today and where I am going tomorrow. This is the most important thing.

PHP and Laravel related content, point connection
I want to make my advertisement: https://laravist.com/

Recommendation Suitable for beginners. The content is centered on small projects!

Buy a book, know how to write php, find a job, don't worry about the salary, do it for a year first, then say this problem is better.

Han shunping's courses

The basic part of PHP is actually quite simple. The best teaching material is the official website (php.net ).
Find a basic book to understand how PHP is used. It is best to explain it in PHP + Mysql. First, learn how to make a simple website or blog.
If successful, you will be able to learn: SQL, PHP BASICS (including session/cookie), simple HTML/CSS
At this time, you will have more and more things to learn.
PHP is the language of the presentation layer. It is not a strict data type. Although it is OOP, it can be completely oriented to process programming... Isn't it strange, and it puts too much data computing on the DB.
At this time, I suggest the following learning aspects: TCP/IP, Operating System, and Linux. Every one of them is very important and difficult to understand.
If you don't want to learn this, you can do it either. But you can always be a low-level code farmer who only performs business and repeat work.
The castle in the air does not exist. remember to lay a good foundation. Even if you don't do PHP in the future, the foundation is solid and everything you can learn is quick. it's like Zhang Wuji, Wu Yang's powerful body guard, and the inside is arrogant. Now I want to learn how to sell it, so I can beat Xuan Ming's old ass...
There are a lot of PHP basic visual screens on the Internet, such as the visual screen of Han tianfeng's teacher at MOOC. There are also a lot of PHP blogs. Let's cheer up.

This is classified. I think we can step by step.
Article 3 here

Baidu PHP development and learning portal

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.