这是一个奇怪的问题。当我尝试通过"启动内置Web服务器"调试位于网络驱动器(Z:htdocsindex.php
)上的.php文件时,服务器启动正常,但当我尝试在浏览器中打开该文件时,我得到错误:
警告:未知:打开流失败:没有这样的文件或目录第0行未知
致命错误:没有开放"Z: 根 index . php"(include_path = ' E: 程序FilesVSCodedataphppear') in Unknown on line 0
我的Z:
驱动器映射到\192.168.0.100
,所以当我在VSCode中打开相同的文件作为\192.168.0.100htdocsindex.php
并尝试调试它时,它工作得很好(就像它由PHP执行一样)。
计算机上没有安装web服务器,VSCode直接执行php.exe
。它是作为非提升用户执行的,而不是作为服务执行的,因此网络访问应该不是问题。实际上,当我使用相同的参数启动php.exe并执行如下命令时:
echo file_get_contents("Z:htdocsindex.php");
php访问和读取文件似乎没有问题。
你知道为什么PHP拒绝网络驱动器,但允许服务器路径吗?
(更新)我已经尝试将网络驱动器映射到本地计算机,VSCode调试工作得很好。
(更新2)我发现了这个问题:我的htdocs
文件夹是一个NTFS连接到服务器上的另一个驱动器。服务器和客户端计算机访问它都没有问题,但是由于某种原因PHP不喜欢它。任何想法为什么和如何解决这个问题?
我正在运行便携式VSCode v1.60.2 x64, PHP 8.0.2, PHP Xdebug扩展v1.19.0
Mylaunch.json
:
{
"version": "0.2.0",
"configurations": [
{
"type": "vscode-edge-devtools.debug",
"request": "launch",
"name": "Launch Microsoft Edge and open the Edge DevTools",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}"
},
{
"name": "Launch Built-in web server",
"type": "php",
"request": "launch",
"runtimeArgs": [
"-dxdebug.mode=debug",
"-dxdebug.start_with_request=yes",
"-i",
"-S",
"localhost:8080"
],
"program": "",
"webRoot": "${workspaceFolder}",
"cwd": "${workspaceFolder}",
"port": 9000,
"serverReadyAction": {
"pattern": "Development Server \(http://localhost:([0-9]+)\) started",
"name": "Launch Microsoft Edge and open the Edge DevTools",
"action": "startDebugging"
}
}
]
}
和php.ini
[PHP]
engine=On
short_open_tag=Off
precision=14
output_buffering=4096
zlib.output_compression=Off
implicit_flush=Off
unserialize_callback_func=
serialize_precision=-1
disable_functions=
disable_classes=
zend.enable_gc=On
zend.exception_ignore_args=Off
zend.exception_string_param_max_len=15
expose_php=On
max_execution_time=120
max_input_time=60
memory_limit=512M
error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors=On
display_startup_errors=On
log_errors=On
log_errors_max_len=1024
ignore_repeated_errors=Off
ignore_repeated_source=Off
report_memleaks=On
variables_order="GPCS"
request_order="GP"
register_argc_argv=Off
auto_globals_jit=On
post_max_size=40M
auto_prepend_file=
auto_append_file=
default_mimetype="text/html"
default_charset="UTF-8"
include_path="E:Program FilesVSCodedataphppear"
doc_root=
user_dir=
extension_dir="E:Program FilesVSCodedataphpext"
enable_dl=Off
file_uploads=On
upload_tmp_dir="E:Program FilesVSCodedataphptmp"
upload_max_filesize=40M
max_file_uploads=20
allow_url_fopen=On
allow_url_include=Off
default_socket_timeout=60
extension=bz2
extension=curl
extension=fileinfo
extension=gettext
extension=mbstring
extension=exif
asp_tags=Off
display_startup_errors=On
track_errors=Off
y2k_compliance=On
allow_call_time_pass_reference=Off
safe_mode=Off
safe_mode_gid=Off
safe_mode_allowed_env_vars=PHP_
safe_mode_protected_env_vars=LD_LIBRARY_PATH
error_log="E:Program FilesVSCodedataphplogsphp_error.log"
register_globals=Off
register_long_arrays=Off
magic_quotes_gpc=Off
magic_quotes_runtime=Off
magic_quotes_sybase=Off
[CLI Server]
cli_server.color=On
[Pdo]
pdo_mysql.default_socket="MySQL"
[Pdo_mysql]
pdo_mysql.default_socket=
[ODBC]
odbc.allow_persistent=On
odbc.check_persistent=On
odbc.max_persistent=-1
odbc.max_links=-1
odbc.defaultlrl=4096
odbc.defaultbinmode=1
[bcmath]
bcmath.scale=0
[browscap]
browscap="E:Program FilesVSCodedataphpextrasbrowscap.ini"
[Session]
session.save_handler=files
session.save_path="E:Program FilesVSCodedataphptmp"
session.use_strict_mode=0
session.use_cookies=1
session.use_only_cookies=1
session.name=PHPSESSID
session.auto_start=0
session.cookie_lifetime=0
session.cookie_path=/
session.cookie_domain=
session.cookie_httponly=
session.cookie_samesite=
session.serialize_handler=php
session.gc_probability=1
session.gc_divisor=1000
session.gc_maxlifetime=1440
session.referer_check=
session.cache_limiter=nocache
session.cache_expire=180
session.use_trans_sid=0
session.sid_length=26
session.trans_sid_tags="a=href,area=href,frame=src,form="
session.sid_bits_per_character=5
[Assertion]
zend.assertions=1
[Tidy]
tidy.clean_output=Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="./tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit=5
[ldap]
ldap.max_links=-1
[Syslog]
define_syslog_variables=Off
[Session]
define_syslog_variables=Off
[Date]
date.timezone=America/New_York
[Sybase-CT]
sybct.allow_persistent=On
sybct.max_persistent=-1
sybct.max_links=-1
sybct.min_server_severity=10
sybct.min_client_severity=10
[XDebug]
zend_extension = "xdebug-3.0.4-8.0-vs16-x86_64"
xdebug.mode = debug, trace, develop
xdebug.start_with_request = yes
xdebug.trace_output_dir = "E:Program FilesVSCodedataphptmp"
所以问题似乎是PHP解析NTFS链接并试图在本地计算机上遵循它们,这些链接不存在。
所以我在服务器上的目录结构如下(简化版本):网络共享htdocs
为E:htdocs
,是D:htdocs
的NTFS节点。作为服务器上的工作,我将D:htdocs
作为网络共享htdocs2
,并在客户端计算机上创建了一个符号链接D:htdocs
到该共享\192.168.0.100htdocs2
修复此问题。