Table des matières
文件加载---理解一个project的第一步,---project
Maison développement back-end tutoriel php 文件加载---理解一个project的第一步,---project_PHP教程

文件加载---理解一个project的第一步,---project_PHP教程

Jul 13, 2016 am 10:07 AM
pro project 加载 文件 理解 de

文件加载---理解一个project的第一步,---project

  当我最开始写php的时候,总是担心这个问题:我在这儿new的一个class能加载到对应的类文件吗?毕竟一运行就报Fatal Error,什么**文件没找到,类无法实例化等等是一种很“低级”的错误,怕别人看了笑话。于是每接一个新任务,我总想把它的加载过程弄清楚(以前只知道几个html标签和样式,不知算不算web开发),有时头儿看了说还有闲心看这个,赶紧写逻辑,照这样做就行了......你妹你知道当然有把握了D:,后来发现原来流程都差不多。

  在一个IDE中开发时,如C++/Java,一般是新建一个工程,通过IDE新添加一个文件到指定目录下,然后#include/Import进来即可,php则使这一步骤更加过程化,文件的加载过程基本确定了这个project(框架或者自搭的项目)的目录结构和文件的分门别类。

   不管框架还是自搭的项目总得有个入口文件,这时要事先加载一些基本信息,如配置文件、通用方法等,使用的基本是手动直接加载单个文件形式,使用下面四个方法之一:

  include、require、include_once、require_once

    <span>include</span>('config.php'<span>);
    </span><span>require</span>('database.php');
Copier après la connexion

  涉及到类文件的加载,少部分是直接加载,比如,通用方法作为静态方法写在一个类Utilities中,因为是后边很多要用到的方法(如错误输出、curl请求、随机字符串生成...),所以用类封装起来,一般也是在加载配置文件时连带加载进来

  include('Utilities.php');

  而更通用的情况是:类的动态加载。首先不谈的加载的方式,来看看大概什么时候会用到一个类和实例:

  1. 最明显的,$obj = new A; 它的变种$className = 'A'; $obj = $className; 都一样;

  2. 类的静态方法、静态变量和常量的调用,即Utilities::httpRequest()、Utilities::$instance、Utilities::HOST;

  3. 在php函数中,使用了回调函数的情况,最典型的call_user_func_array()(call_user_func),还有其他用到了callback的地方,如数组中的array_walk、array_map,它们需要一个回调函数作为参数。

  回调函数非常灵活,不止可以是简单函数,还可以是对象的方法,包括静态类方法。因为可以用对象方法或静态方法,所以这钟时候也要去加载对应的类文件。自php5.3起,回调函数还可以像js中,用匿名函数来实现。

     <span>class</span><span> A{
         </span><span>public</span> <span>static</span> <span>function</span> cube(<span>$var</span><span>){
             </span><span>return</span> <span>pow</span>(<span>$var</span>, 3<span>);
         }
         
         </span><span>public</span> <span>function</span> twice(<span>$var</span><span>){
             </span><span>return</span> 2*<span>$var</span><span>;
         }
     }
     </span><span>//</span><span> 使用类的静态方法</span>
     <span>$num</span> = <span>call_user_func</span>('A::cube', 5<span>);
     </span><span>//</span><span> 使用对象</span>
     <span>$obj</span> = <span>new</span><span> A;
     </span><span>$num</span> = <span>call_user_func_array</span>(<span>array</span>(<span>$obj</span>, 'twice'), <span>array</span>(7));
Copier après la connexion

  严格来说上例中的call_user_func_array在之前已经实例化了对象,但是存在这么个用法,它完全也可以使用类静态方法。

  首先要明白的是,为什么需要动态加载。php是脚本语言,我们访问时,是以脚本为可用资源,比如现在根目录有个index.php文件,它没有include任何其他文件,当我们直接以localhost/index.php来访问时,可以访问到index.php中的全部资源,如果index.php中定义了一个普通类A,在该脚本中实例化一个A的对象时,程序会这样反应:哦,我已经看到了A的定义,可以直接实例化它(不需要加载其他文件)。如果还有类B、C、D等很多类,全部写在index.php中显然不行,那就写在其他文件中,再include进来(include已经在做加载的工作了),这样对程序来说,也是“可见”的了。

  但是随着系统功能的增多,类越来越多,各个类的功能也不同,有的直接定义数据库的操作,读取数据库的数据,有的是控制访问脚本时要运行的方法,有的则是将要展现出来的页面,有的是我们引用的第三方核心库,于是,当我们把所有的文件放在一个目录中时,虽然可以直接include加载,但这些文件摆放显得既杂乱无章又难找,维护成本还高。好呗,那就在根目录下再分别建几个目录,目录A专门存放与数据库打交道的脚本,目录B是系统的各种配置信息文件,目录C是控制我们进入程序时的入口控制方法的脚本,目录D是即将展示到浏览器的页面......

  于是MVC架构慢慢就演化出来了,我们不能再像以前那样直接include,脚本都放在特定的目录下,如Controller目录下存放的是各种控制器,加载控制器时,我们得这样include('root/Controller/indexController.php'),每次都在文件前面弄一大串的include不仅看着头疼,简直让人累觉不爱。既然有了获取当前文件路径和类名的现成方法,为何不将类名与文件名对应起来,而只要是控制器类的脚本就全放在根目录的Controller子目录下边,就可以写一个方法,只要是控制器类,在这个方法中运行include(ROOT.'Controller/'.$className.'.php');这一句,ROOT为根目录常量,$className为传入的类名,只要是模型类,就这样include(ROOT.'Model/'.$className.'.php');,全凭这个函数来动态控制到哪个目录里边去找,这个project可能就是这样的:

  无形中,就建立起了类名和文件名的对应规则,文件和所在的目录的对应规则,该project下有哪些这样的目录和文件呢?啊原来是放控制器的Controller、放配置信息的Config等等,再次于无形中得知了这个project的结构,而上面说的,利用函数根据一定条件(传入参数)可知自动到哪个目录下去加载该文件,而不是一个个写死的include,就是所谓的文件的动态加载了。

  因此,当你要新建一个**类文件时,也就知道,哦在这个project中,我应该放在这个目录下,文件的命名应该与类名相同,这样就一定能加载到了~~~接下来就是写业务逻辑的一个“愉快的过程”。

  知道什么时候会动态加载及为什么要动态加载后,接下来就是来实现了,也就是上面说到的利用函数来加载某个文件,就是要写好这个“函数”来实现这个过程。常用的有三种方式:

  1. __autoload

  我第一次学的时候就是用的就是这个,魔术函数,只要定义了php程序就会在要用到一个类时自动调用它进行文件动态加载,一样,既然它是个函数,就要让程序对__autoload的定义可见,不然从哪儿调用它呢?一般来说,作为后边程序大部分地方要用到的方法,我们都会放在一个单独的文件中,在程序的入口处加载进来,一个project总得有几个文件是手动include的,完全可以在开头单独include进来,或者放在配置信息中,加载配置信息时就加载进来了。它的原型:

  void __autoload ( string $class )

  参数当前加载的类名名称(注意如果有命名空间,则包含命名空间前缀),下面是一个针对上面的图片结构的简单示例:

    <span>//</span><span> file: autoload.php 
    // ROOT为已经定义的根目录常量</span>
    <span>function</span> __autoload(<span>$className</span><span>){
        </span><span>try</span><span>{
            </span><span>if</span>(<span>file_exists</span>(ROOT.'Controller/'.<span>$className</span>.'.php')){<span>//</span><span> 检查Controller</span>
                <span>include</span>(ROOT.'Controller/'.<span>$className</span>.'.php'<span>);
            }
            </span><span>else</span> <span>if</span>(<span>file_exists</span>(ROOT.'Model/'.<span>$className</span>.'.php')){<span>//</span><span> 检查Model</span>
                <span>include</span>(ROOT.'Model/'.<span>$className</span>.'.php'<span>);
            }
            </span><span>else</span> <span>if</span>(<span>file_exists</span>(ROOT.'Lib/'.<span>$className</span>.'.php')){<span>//</span><span> 检查Lib</span>
                <span>include</span>(ROOT.'Lib/'.<span>$className</span>.'.php'<span>);
            }
            </span><span>else</span>{                                               <span>//</span><span> 找不到该文件</span>
                <span>throw</span> <span>new</span> <span>Exception</span>("ERROR: can't find file {<span>$className</span>}.php"<span>);
            }
        }
        </span><span>catch</span>(<span>Exception</span> <span>$e</span><span>){
            </span><span>echo</span> <span>$e</span>.<span>getMessage();
            </span><span>exit</span><span>;
        }
    }</span>
Copier après la connexion

  

  2. spl_autoload_register

  __autoload实际上也差不多了,但它是php定义的,如果现在有个东西写了并调用之后,就告诉程序说,我不用__autoload来加载文件了,我已经定义了一个专门加载文件的方法(比如名称是loadClass),以后需要加载一个类文件时,你就用它吧。spl_autoload_register就是这样一个能告诉程序这样去做的方法,而且自定义加载方法将会更灵活,可以指定多个加载函数,spl_autoload_register函数会将这些函数放在一个队列中,并激活它们,在调用时逐个激活:“If there must be multiple autoload functions, spl_autoload_register() allows for this. It effectively creates a queue of autoload functions, and runs through each of them in the order they are defined. ”,php.net上(http://php.net/manual/en/function.spl-autoload-register.php)也确实如此解释,spl_autoload_unregister则是从加载函数队列中注销。

  另外spl_autoload_functions()函数,可以获取我们注册了哪些函数;spl_autoload_call($class)函数,尝试调用所有已注册的加载函数来加载$class的类文件。

  对于spl_autoload_register的解释,我的理解是,如果用spl_autoload_register注册了n个函数在加载队列中,因为它自动激活它们嘛,现在我要实例化一个类,在第1个加载函数中加载失败了,然后尝试第2个函数,第二个失败则尝试第3个,''',直到第n个函数走完,若还没加载成功,就报错,只要中间一个加载成功就成功了,but事实好像有点出入。

  还是用上一个图片中的目录结构,

  1、在Controller目下创建indexController.php文件,包含类indexController;

  2、在Model目录下创建userModel.php文件,包含类userModel;

  3、首页写个类加载脚本Autoload.php,代码如下:

    <span>//</span><span> file: Autoload.php</span>
    <span>define</span>('DS',<span> DIRECTORY_SEPARATOR);
    </span><span>define</span>('ROOT', <span>rtrim</span>(<span>dirname</span>(<span>__FILE__</span>), '/\\').<span>DS);
    
    </span><span>class</span><span> Autoload{
        </span><span>public</span> <span>static</span> <span>function</span> autoloadRegister(<span>$loadFunc</span> = 'Autoload::loadControllerClass', <span>$enable</span> = <span>true</span><span>){
            </span><span>return</span> <span>$enable</span> ? spl_autoload_register(<span>$loadFunc</span>) : spl_autoload_unregister(<span>$loadFunc</span><span>);
        }
        </span><span>//</span><span> 加载控制器类</span>
        <span>public</span> <span>static</span> <span>function</span> loadControllerClass(<span>$className</span><span>){
            </span><span>if</span>(<span>file_exists</span>(ROOT.'Controller'.DS.<span>$className</span>.'.php')){<span>//</span><span> 检查Controller</span>
                <span>include</span>(ROOT.'Controller'.DS.<span>$className</span>.'.php'<span>);
                </span><span>echo</span> ROOT.'Controller'.DS.<span>$className</span>.'.php'.'<br/>'<span>;
            }
            </span><span>else</span><span>{
                </span><span>echo</span> "ERROR: can't find file {<span>$className</span>}.php in ".ROOT."Controller"<span>;
                </span><span>exit</span><span>;
            }
        }
        </span><span>//</span><span> 加载模型类</span>
        <span>public</span> <span>static</span> <span>function</span> loadModelClass(<span>$className</span><span>){
            </span><span>if</span>(<span>file_exists</span>(ROOT.'Model'.DS.<span>$className</span>.'.php')){<span>//</span><span> 检查Model</span>
                <span>include</span>(ROOT.'Model'.DS.<span>$className</span>.'.php'<span>);
                </span><span>echo</span> ROOT.'Model'.DS.<span>$className</span>.'.php'.'<br/>'<span>;
            }
            </span><span>else</span><span>{
                </span><span>echo</span> "ERROR: can't find file {<span>$className</span>}.php in ".ROOT."Model"<span>;
                </span><span>exit</span><span>;
            }
        }
    }</span>
Copier après la connexion

  4、测试脚本,测试类是否能加载

    <span>//</span><span> 注册两个加载函数</span>
    Autoload::autoloadRegister('Autoload::loadControllerClass'<span>);
    Autoload</span>::autoloadRegister('Autoload::loadModelClass'<span>);</span><span>
    
    // 查看总共注册了哪些加载函数</span>
    <span>echo</span> 'register functions=> <pre class="brush:php;toolbar:false">'<span>;
    </span><span>print_r</span><span>(spl_autoload_functions());
    </span><span>//</span><span> 分别实例化一个Controller类和Model类</span>
    <span>$indexCon</span> = <span>new</span><span> indexController;
    </span><span>$userMod</span> = <span>new</span> userModel;
Copier après la connexion

   结果是这样

  

  这不科学啊,spl_autoload_functions数组显示两个函数都注册了,但是当实例化userModel类时它还是跑到Controller目录中去找,两个类的实例化调用的自动加载方法都是Autoload::loadControllerClass,所以userModel类文件加载报错......注意到spl_autoload_register方法的第三个参数, 是添加一个加载函数时放在栈中的位置,于是我另写一个类似的类otherLoad,只是为了将loadModelClass方法放到队列首部:

    <span>class</span><span> otherLoad{
        </span><span>public</span> <span>static</span> <span>function</span> autoloadRegister(<span>$loadFunc</span> = 'otherLoad::loadModelClass', <span>$enable</span> = <span>true</span><span>){
            </span><span>//</span><span> 默认将loadModelClass放在队首</span>
            <span>return</span> <span>$enable</span> ? spl_autoload_register(<span>$loadFunc</span>, <span>true</span>, <span>true</span>) : spl_autoload_unregister(<span>$loadFunc</span><span>);
        }
        </span><span>//</span><span> 加载模型类</span>
        <span>public</span> <span>static</span> <span>function</span> loadModelClass(<span>$className</span><span>){
            </span><span>if</span>(<span>file_exists</span>(ROOT.'Model'.DS.<span>$className</span>.'.php')){<span>//</span><span> 检查Model</span>
                <span>include</span>(ROOT.'Model'.DS.<span>$className</span>.'.php'<span>);
                </span><span>echo</span> ROOT.'Model'.DS.<span>$className</span>.'.php'.'<br/>'<span>;
            }
            </span><span>else</span><span>{
                </span><span>echo</span> "ERROR: can't find file {<span>$className</span>}.php in ".ROOT."Model"<span>;
                </span><span>exit</span><span>;
            }
        }
    } </span>
Copier après la connexion

  测试是这样

    <span>//</span><span> 注册三个加载函数</span>
    Autoload::autoloadRegister('Autoload::loadControllerClass'<span>);
    Autoload</span>::autoloadRegister('Autoload::loadModelClass'<span>);
    otherLoad</span>::autoloadRegister('otherLoad::loadModelClass'<span>);
    
    </span><span>//</span><span> 查看总共注册了哪些加载函数</span>
    <span>echo</span> 'register functions=> <pre class="brush:php;toolbar:false">'<span>;
    </span><span>print_r</span><span>(spl_autoload_functions());
    </span><span>//</span><span> 分别实例化一个Controller类和Model类</span>
    <span>$indexCon</span> = <span>new</span><span> indexController;
    </span><span>$userMod</span> = <span>new</span> userModel;
Copier après la connexion

  这次的结果是这样:

  

  可以看到,这次是在加载indexController类时不成功,因为它只调用了loadModelClass方法,再看看spl_autoload_functions返回的数组,otherLoad类的loadModelClass方法在最前面,难道说,只有在加载函数队列最前面的函数才被用于自动加载,其他无效?这是什么状况?

  使用spl_autoload_call('indexController')来“尝试调用所有已注册的函数来装载请求类”,还是报这个错。

  翻了下别人的文章,包括github上的博客,也就是列举了下手册上说的“可以一次注册多个加载函数 bala bala......”,难道没有人试过,还是我的理解有问题>3<...(win下测试,php版本5.4.10)真是这样的话spl_autoload_register方法就没多大意义嘛╮(╯▽╰)╭......

  关于spl_autoload_register还有几个有意思的地方:

  1、 一个函数只会加载到函数队列中一次,重复加载也是如此;

  2、 spl_autoload_register如果不指定加载函数(第一个参数),则默认使用加载函数spl_autoload(功能类似于__autoload,是它的默认实现形式)

  3、 spl_autoload_register指定了__autoload为加载函数,则一定要实现__autoload;

  4、 同时实现了spl_autoload_register和__autoload,优先使用spl_autoload_register注册的加载函数。

  以上几种情况几乎都可从php.net的note中找到测试例子,老外写得挺有意思,可供参考。上面第2点还需要注意,比如现在在根目录创建一个目录,使用默认函数来加载:

    <span>//</span><span> 设置加载文件的扩展名,将只加载*.php的文件</span>
    spl_autoload_extensions('.php'<span>);
    </span><span>//</span><span> 默认使用spl_autoload加载文件,只能加载当前目录下文件:小写类名.php</span>
<span>    spl_autoload_register();
    </span><span>//</span><span> 测试
    // $obj = new A;</span>
Copier après la connexion

  spl_autoload_extensions设置加载时只认哪些扩展类型的文件,默认是.php或者.inc文件,这里设置成.php,然后就是调用注册函数。在根目录下创建一个A.php文件,新建一个类A,加载成功,再将文件名改成a.php,照样加载成功。需要留意spl_autoload默认将类名转小写,但是A.php照样加载成功,因为Windows的文件是大小写不敏感的(在同一目录下创建一个d.txt,再创建D.txt会认为是同一个文件),对于Mac OS X也是这样,但Linux就是大小写敏感了,测试时要注意这点。

  也不是全要自动加载,如CI,它将加载文件封装为一个核心类CI_Loader,程序启动时先include必要的脚本(其他要用的核心类),然后再等需要使用时,CI_Loader实例作为当前控制器类或模型类等的一个属性成员,通过调用它的方法来include各种model(模型)、view(视图)、database(数据库对象)、helper(辅助函数)等等。

  无论用不用动态加载,必须保证的是,文件分门别类的放好,文件按一定规则命名,这是一个健壮、高扩展、高易用的project必备的,写起代码来也方便。当然加载文件的多少,占内存的多少,各有不同,也是评判一个框架的若干标准。弄清楚加载方式,熟悉一个框架结构不就是很容易的事了=_=...

 

  

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/955204.htmlTechArticle文件加载---理解一个project的第一步,---project 当我最开始写php的时候,总是担心这个问题:我在这儿new的一个class能加载到对应的类文件吗...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment transférer des fichiers de Quark Cloud Disk vers Baidu Cloud Disk ? Comment transférer des fichiers de Quark Cloud Disk vers Baidu Cloud Disk ? Mar 14, 2024 pm 02:07 PM

Quark Netdisk et Baidu Netdisk sont actuellement les logiciels Netdisk les plus couramment utilisés pour stocker des fichiers. Si vous souhaitez enregistrer les fichiers de Quark Netdisk sur Baidu Netdisk, comment procéder ? Dans ce numéro, l'éditeur a compilé les étapes du didacticiel pour transférer des fichiers d'un ordinateur Quark Network Disk vers Baidu Network Disk. Voyons comment le faire fonctionner. Comment enregistrer les fichiers du disque réseau Quark sur le disque réseau Baidu ? Pour transférer des fichiers de Quark Network Disk vers Baidu Network Disk, vous devez d'abord télécharger les fichiers requis depuis Quark Network Disk, puis sélectionner le dossier cible dans le client Baidu Network Disk et l'ouvrir. Ensuite, faites glisser et déposez les fichiers téléchargés depuis Quark Cloud Disk dans le dossier ouvert par le client Baidu Cloud Disk, ou utilisez la fonction de téléchargement pour ajouter les fichiers sur Baidu Cloud Disk. Assurez-vous de vérifier si le fichier a été transféré avec succès dans Baidu Cloud Disk une fois le téléchargement terminé. C'est ça

Que faire si le code d'erreur 0x80004005 apparaît. L'éditeur vous apprendra comment résoudre le code d'erreur 0x80004005. Que faire si le code d'erreur 0x80004005 apparaît. L'éditeur vous apprendra comment résoudre le code d'erreur 0x80004005. Mar 21, 2024 pm 09:17 PM

Lors de la suppression ou de la décompression d'un dossier sur votre ordinateur, une boîte de dialogue d'invite « Erreur 0x80004005 : erreur non spécifiée » apparaît parfois. Comment devez-vous résoudre cette situation ? Il existe en fait de nombreuses raisons pour lesquelles le code d'erreur 0x80004005 est demandé, mais la plupart d'entre elles sont causées par des virus. Nous pouvons réenregistrer la DLL pour résoudre le problème. Ci-dessous, l'éditeur vous expliquera l'expérience de gestion du code d'erreur 0x80004005. . Certains utilisateurs reçoivent le code d'erreur 0X80004005 lors de l'utilisation de leur ordinateur. L'erreur 0x80004005 est principalement due au fait que l'ordinateur n'enregistre pas correctement certains fichiers de bibliothèque de liens dynamiques ou à un pare-feu qui n'autorise pas les connexions HTTPS entre l'ordinateur et Internet. Alors que diriez-vous

Qu'est-ce que le fichier hiberfil.sys ? hiberfil.sys peut-il être supprimé ? Qu'est-ce que le fichier hiberfil.sys ? hiberfil.sys peut-il être supprimé ? Mar 15, 2024 am 09:49 AM

Récemment, de nombreux internautes ont demandé à l'éditeur : quel est le fichier hiberfil.sys ? hiberfil.sys peut-il occuper beaucoup d’espace sur le disque C et être supprimé ? L'éditeur peut vous indiquer que le fichier hiberfil.sys peut être supprimé. Jetons un coup d'œil aux détails ci-dessous. hiberfil.sys est un fichier caché dans le système Windows et également un fichier d'hibernation du système. Il est généralement stocké dans le répertoire racine du lecteur C et sa taille est équivalente à la taille de la mémoire installée du système. Ce fichier est utilisé lorsque l'ordinateur est en veille prolongée et contient les données de mémoire du système actuel afin qu'il puisse être rapidement restauré à son état précédent lors de la récupération. Étant donné que sa taille est égale à la capacité de la mémoire, il peut occuper une plus grande quantité d’espace sur le disque dur. hiberner

Explication détaillée du rôle des fichiers .ibd dans MySQL et précautions associées Explication détaillée du rôle des fichiers .ibd dans MySQL et précautions associées Mar 15, 2024 am 08:00 AM

Explication détaillée du rôle des fichiers .ibd dans MySQL et précautions associées MySQL est un système de gestion de base de données relationnelle populaire, et les données de la base de données sont stockées dans différents fichiers. Parmi eux, le fichier .ibd est un fichier de données du moteur de stockage InnoDB, utilisé pour stocker des données et des index dans des tables. Cet article fournira une analyse détaillée du rôle du fichier .ibd dans MySQL et fournira des exemples de code pertinents pour aider les lecteurs à mieux comprendre. 1. Le rôle des fichiers .ibd : stockage des données : les fichiers .ibd sont du stockage InnoDB

Explication détaillée de la commande d'affichage des journaux dans le système Linux ! Explication détaillée de la commande d'affichage des journaux dans le système Linux ! Mar 06, 2024 pm 03:55 PM

Sur les systèmes Linux, vous pouvez utiliser la commande suivante pour afficher le contenu du fichier journal : Commande tail : La commande tail est utilisée pour afficher le contenu à la fin du fichier journal. Il s'agit d'une commande courante pour afficher les dernières informations du journal. tail [option] [nom du fichier] Les options couramment utilisées incluent : -n : Spécifiez le nombre de lignes à afficher, la valeur par défaut est de 10 lignes. -f : Surveillez le contenu du fichier en temps réel et affichez automatiquement le nouveau contenu lorsque le fichier est mis à jour. Exemple : tail-n20logfile.txt#Afficher les 20 dernières lignes du fichier logfile.txt tail-flogfile.txt#Surveiller le contenu mis à jour du fichier logfile.txt en temps réel Commande head : La commande head permet d'afficher le début du fichier journal

Trois caméras avec zoom 20x, Honor sélectionne l'innovation Xiaopai Smart Camera Pro à venir Trois caméras avec zoom 20x, Honor sélectionne l'innovation Xiaopai Smart Camera Pro à venir Aug 23, 2024 pm 09:44 PM

Avez-vous installé des caméras chez vous ? Ces dernières années, les caméras domestiques sont soudainement devenues un succès. J'ai demandé à mes amis autour de moi, et mon garçon, chaque maison en a un, et certaines en ont même plusieurs. Cependant, avec la popularité du produit, celui-ci a également suscité quelques plaintes lors de son utilisation. Par exemple, vous ne pouvez voir qu'un seul endroit à la fois, et si vous voulez voir d'autres endroits, vous devez régler le panoramique/inclinaison et faire pivoter la caméra d'avant en arrière. Il y a un certain angle mort et un certain décalage horaire lors de la visualisation. l'image ; ou lorsque vous souhaitez regarder de plus près un certain endroit de votre maison, vous constatez que l'image est floue et vous ne pouvez pas la voir du tout, etc... L'expérience est grandement compromise. Honor Select et Xiaopai Technology ont lancé conjointement la Honor Select Xiaopai Smart Camera Pro dotée de « trois objectifs et deux images ». Fournit de nouvelles solutions aux problèmes de l’industrie et des utilisateurs

Créer et exécuter des fichiers Linux '.a' Créer et exécuter des fichiers Linux '.a' Mar 20, 2024 pm 04:46 PM

Travailler avec des fichiers dans le système d'exploitation Linux nécessite l'utilisation de diverses commandes et techniques qui permettent aux développeurs de créer et d'exécuter efficacement des fichiers, du code, des programmes, des scripts et d'autres éléments. Dans l'environnement Linux, les fichiers portant l'extension « .a » sont d'une grande importance en tant que bibliothèques statiques. Ces bibliothèques jouent un rôle important dans le développement de logiciels, permettant aux développeurs de gérer et de partager efficacement des fonctionnalités communes sur plusieurs programmes. Pour un développement logiciel efficace dans un environnement Linux, il est crucial de comprendre comment créer et exécuter des fichiers « .a ». Cet article explique comment installer et configurer de manière complète le fichier Linux « .a ». Explorons la définition, l'objectif, la structure et les méthodes de création et d'exécution du fichier Linux « .a ». Qu'est-ce que L

Que dois-je faire si le fichier lib est manquant dans le système Linux ? Que dois-je faire si le fichier lib est manquant dans le système Linux ? Mar 19, 2024 pm 03:03 PM

Titre : Que dois-je faire si le fichier lib est manquant dans le système Linux ? Lorsque vous utilisez un système Linux, vous pouvez parfois rencontrer des fichiers lib manquants, ce qui peut empêcher le programme de fonctionner correctement. Cet article décrit quelques méthodes pour résoudre ce problème et fournit des exemples de code spécifiques. 1. Invites d'erreur : lorsque le programme est exécuté sur le système Linux, si la bibliothèque de liens dynamiques (lib) nécessaire est manquante, une invite similaire à la suivante apparaîtra : errorwhileloadingsharedlibrari

See all articles