我一直在查看GitHub上的Predis代码,而且代码庞大,因此仅查看代码对我来说有点困难,因为我不了解每个文件夹/文件的用途
我想知道的是,在使用MySQL或Redis或任何其他数据库系统时,PHP实际上如何与数据库联系?它是否使系统调用类似于您使用C进行的操作,system("some command here");
还是开发人员必须实际扩展PHP语言的编译器才能做到这一点?
您不必“扩展编译器”,但是您必须做这可能意味着的事情:用C编写一个PHP模块/扩展,与数据库的(通常是)C库API对话。这意味着什么?数据库通常带有连接器库,这些连接器库通常以低级C编写,因此提供了基于C的API。它或多或少的工作方式类似于include 'api.php'
,然后允许您调用刚刚包含的任何功能,但它特定于C。PHP代码无法直接与C代码对话,但是用C编写的PHP扩展可以充当两者之间的“桥梁”。 PHP代码和C API。
然后,该C库具有许多选择,使其可以与实际数据库通信。它可以直接与数据库的另一个C API通信,尽管这不一定是典型的。通常使用UNIX套接字或TCP套接字,如果数据库位于另一台计算机上,则有时跨网络使用。如果愿意,您可以直接通过PHP代码与该UNIX / TCP套接字通信,但这意味着您必须重新实现整个协议才能以PHP代码与数据库通信。这通常效率很低,因为PHP是一种高级语言,并且不提供对内存等原始计算机资源的任何直接访问,这使得该实现效率很低。
因此,通常的方式是:
没有什么可以阻止您在替代客户端中以其他语言实现该协议的,但是由于这通常是一个繁琐的过程,并且C是一个广泛使用的系统,因此人们通常最终会在现有的官方C库周围编写包装器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句