请离开include_once和require_once_PHP教程
诚然, 这个理由是对的, 不过, 我今天要说的, 是另外一个的原因.
我们知道, PHP去判断一个文件是否被加载, 是需要得到这个文件的opened_path的, 意思是说, 比如:
set_include_path("/tmp/:/tmp2/");
include_once("2.php");
?>
当PHP看到include_once “2.php”的时候, 他并不知道这个文件的实际路径是什么, 也就无法从已加载的文件列表去判断是否已经加载, 所以在include_once的实现中, 会首先尝试解析这个文件的真实路径(对于普通文件这个解析仅仅类似是检查getcwd和文件路径, 所以如果是相对路径, 一般是不会成功), 如果解析成功, 则查找EG(include_files), 如果存在则说明包含过了, 返回, 否则open这个文件, 从而得到这个文件的opened_path. 比如上面的例子, 这个文件存在于 “/tmp2/2.php”.
然后, 得到了这个opened_path以后, PHP去已加载的文件列表去查找, 是否已经包含, 如果没有包含, 那么就直接compile, 不再需要open file了.
1. 尝试解析文件的绝对路径, 如果能解析成功, 则检查EG(included_files), 存在则返回, 不存在继续
2. 打开文件, 得到文件的打开路径(opened path)
3. 拿opened path去EG(included_files)查找, 是否存在, 如果存在则返回, 不存在继续
4. 编译文件(compile_file)
这个在大多数情况下, 不是问题, 然而问题出在当你使用APC的时候…
在使用APC的时候, APC劫持了compile_file这个编译文件的指针, 从而直接从cache中得到编译结果, 避免了对实际文件的open, 避免了对open的system call.
然而, 当你在代码中使用include_once的时候, 在compile_file之前, PHP已经尝试去open file了, 然后才进入被APC劫持的compile file中, 这样一来, 就会产生一次额外的open操作. 而APC正是为了解决这个问题, 引入了include_once_override, 在include_once_override开启的情况下, APC会劫持PHP的ZEND_INCLUDE_OR_EVAL opcode handler, 通过stat来确定文件的绝对路径, 然后如果发现没有被加载, 就改写opcode为include, 做一个tricky解决方案.
但是, 很可惜, 如我所说, APC的include_once_override实现的一直不好, 会有一些未定义的问题, 比如:
set_include_path("/tmp");
function a($arg = array()) {
include_once("b.php");
}
a();
a();
?>
然后, 我们的b.php放置在”/tmp/b.php”, 内容如下:
class B {}
?>
那么在打开apc.include_once_override的情况下, 连续访问就会得到如下错误:
Fatal error - include() : Cannot redeclare class
排除这些技术因素, 我也一直认为, 我们应该使用include, 而不是include_once, 因为我们完全能做到自己规划, 一个文件只被加载一次. 还可以借助自动加载, 来做到这一点.
你使用include_once,只能证明, 你对自己的代码没信心.
所以, 建议大家, 不要再使用include_once

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











vue3+vite:src는 require를 사용하여 이미지를 동적으로 가져오고 vue3+vite는 여러 이미지를 동적으로 가져옵니다. vue3을 사용하는 경우 require는 이미지를 사용할 수 없습니다. imgUrl:require(' .../assets/test.png') 와 같은 vue2는 typescript가 require를 지원하지 않기 때문에 가져오므로 이를 해결하는 방법은 다음과 같습니다. waitimport를 사용합니다.

R55600과 어떤 ASUS 마더보드를 결합해야 합니까? ASUS ROGStrixB550-FGaming 마더보드는 탁월한 선택입니다. Ryzen55600X 프로세서와 완벽하게 호환되며 뛰어난 성능과 기능을 제공합니다. 이 마더보드는 안정적인 전원 공급 시스템을 갖추고 있으며 오버클러킹을 지원할 수 있으며 일상적인 사용과 게임 요구 사항을 충족할 수 있는 풍부한 확장 슬롯과 포트를 제공합니다. ROGStrixB550-FGaming은 또한 고품질 오디오 솔루션, 빠른 네트워크 연결 및 안정적인 열 방출 설계를 갖추고 있어 시스템이 효율적이고 안정적으로 유지되도록 보장합니다. 또한, 이 마더보드는 화려한 ROG 스타일을 채택하고 화려한 RGB 조명 효과를 탑재하여 컴퓨터에 시각적 즐거움을 더해줍니다. 전체적으로 ASUS ROGStri

Celeron g4900과 i36100 중 어느 것이 더 낫습니까? 두 프로세서 Celeron G4900과 I36100의 경우 I36100의 성능이 우수하다는 것은 의심의 여지가 없습니다. 셀러론 프로세서는 일반적으로 저가형 프로세서로 간주되며 주로 저가형 노트북에 사용됩니다. I3 프로세서는 주로 고급 프로세서에 사용되며 성능이 매우 좋습니다. 게임을 하든, 동영상을 보든 I3 프로세서를 사용해도 아무런 지연이 발생하지 않습니다. 따라서 가능하다면 온라인 세계의 즐거움을 누릴 수 있도록 특히 데스크탑 컴퓨터용 Intel I 시리즈 프로세서를 구입해 보십시오. Celeron G4900T의 성능은 어떻습니까? 성능 측면에서 Pentium G4900T는 이전 버전과 비교하여 성능이 좋습니다.

PHP를 사용하여 웹 페이지를 작성할 때 때로는 현재 PHP 파일에 다른 PHP 파일의 코드를 포함해야 할 때가 있습니다. 이때, include 또는 include_once 함수를 사용하여 파일 포함을 구현할 수 있습니다. 그렇다면 include와 include_once의 차이점은 무엇입니까?

require 사용법: 1. 모듈 소개: 많은 프로그래밍 언어에서 require는 외부 모듈이나 라이브러리를 소개하여 이들이 제공하는 기능을 프로그램에서 사용할 수 있도록 하는 데 사용됩니다. 예를 들어 Ruby에서는 require를 사용하여 타사 라이브러리나 모듈을 로드할 수 있습니다. 2. 클래스 또는 메서드 가져오기: 일부 프로그래밍 언어에서는 require를 사용하여 특정 클래스나 메서드를 현재 파일에서 사용할 수 있도록 가져옵니다. 3. 특정 작업 수행: 일부 프로그래밍 언어나 프레임워크에서는 특정 작업이나 기능을 수행하는 데 require가 사용됩니다.

티베트로 배낭여행을 가려고 합니다. ① 가방은 몇 리터 정도 가지고 가는 것이 가장 좋은지 알려주세요. 170인데 체력이 처음이라 60 정도 들어갔습니다. 리터 이상. 전체 여행은 자동차로 이루어졌습니다. 배낭이 필요하지 않으면 25-40 리터의 여행 가방이 더 편리합니다. 티베트 여행에 필요한 물품: 선글라스, 선햇, 자외선 차단제, 스킨 크림, 립밤, 긴팔 상의, 특별한 여행이나 알리, 북부 티베트 및 쓰촨-티베트 노선 여행을 위한 스웨터. 지참 권장사항: 침낭(방한용품), 시트(더러움 방지용품), 다운 재킷, 여행용 신발 또는 등산화, 슬리퍼, 칫솔, 치약, 수건, 롤링페이퍼, 종이 속옷, 소독 물티슈, 손전등, 방수 성냥, 칼 , 로프. 컴퓨터를 앞가방에 넣을 수 있나요? 일부 백팩에는 컴퓨터를 넣을 수 있나요?

AI Ideograms가 현실감과 예술적 감각을 놓고 경쟁할 때 Ideogram은 까다로운 길을 열었습니다. 그림에서 텍스트를 정확하게 생성할 수 있고 글꼴과 레이아웃이 아름답습니다. 이 요구는 틈새 시장이 아닙니다. P-그림을 사용하지 않고 한 번의 클릭으로 포스터와 일러스트레이션을 생성할 수 있으며 디자인에 대해 전혀 모르는 일반 사람들에게 매우 적합합니다. 우리는 이전에 Ideogram 버전 1.0에 대해 글을 썼습니다. 8월 21일 버전 2.0이 나왔습니다. 현실감이 더 좋아졌고, 포스터 디자인도 더 좋아졌으며, 텍스트의 특수 능력도 더욱 강해졌습니다. 들어본 적도 없으실 겁니다. 구글 출신 직원들이 개발한 AI 제품이라 부족한 점이 많지만, 코너에서는 롱보드가 미드저니를 '추월'할 수 있습니다. 오시는 길 https://ideogram.ai/A

Huntkey s980과 Bauhaus 중 어느 것이 더 낫나요? Huntkey S980과 Bauhaus(BeQuiet)는 컴퓨터 전원 공급 장치(PSU) 제조업체의 서로 다른 브랜드입니다. 어느 것을 선택하는 것이 더 나은지는 귀하의 필요와 개인 취향에 따라 다릅니다. 소비자가 인정하고 칭찬했습니다. 그들의 제품은 개인용 컴퓨터, 서버, 산업 장비 및 기타 분야에서 널리 사용됩니다. Huntkey는 고품질 전력 제품을 제공하고 지속적으로 새로운 기술과 혁신적인 디자인을 도입하기 위해 최선을 다하고 있습니다. 해당 제품은 장치에 안정적이고 효율적으로 전원을 공급할 수 있도록 엄격한 품질 관리 및 테스트를 거칩니다. 헌트키는 또한 환경 보호와 에너지 절약에도 관심을 기울이고 있으며, 환경에 미치는 영향을 줄이기 위해 노력하고 있습니다. 이들 전원 공급 장치는 국제 표준을 준수하며 여러 인증과 상을 받았습니다. 평판이 좋은 브랜드로서
