代码之家  ›  专栏  ›  技术社区  ›  Katerine459

PHP错误:“未指定输入文件。”在IIS 10.0中,本地开发服务器上的PHP 5.6

  •  2
  • Katerine459  · 技术社区  · 7 年前

    我的开发服务器有问题。运行Win 10 Pro、IIS 10.0.16299、PHP 5.6(安装到 C:\Program Files (x86)\PHP\v5.6 ).这是最近的一期;PHP过去工作得很好,但后来就停止了工作。

    我的所有PHP应用程序现在都返回错误“未指定输入文件”。这些应用程序位于“默认网站”内,但位于其他位置(与我的工作内容一起)。它们是在IIS中配置的,共享应该正确设置(因为一切都正常工作)。

    根据我在网上找到的所有信息,以下是我所尝试的。但是,没有任何效果:

    • 从控制面板卸载并重新安装IIS |程序和功能|打开和关闭Windows功能。重新安装后,将FastCGI处理程序添加到IIS,指向 C:\Program Files (x86)\PHP\v5.6\php-cgi.exe 。还要再次检查路径是否包含PHP目录。
    • 替换了php。ini(在5.6目录中)和开发副本,并将这些行更新为以下内容:

      doc_root = "C:\inetpub\wwwroot"
      
      cgi.force_redirect = 0
      

      。。。并运行iisreset(根据 https://support.qualityunit.com/428346-I-see-error-No-input-file-specified-on-IIS-server )。

    • 扫描我的磁盘错误,运行完整的病毒扫描,检查我的主机文件以确保没有任何问题。

    我也看过这些信息 in this question ,但我担心很多事情都让我不知所措。我是一个偶尔在PHP中工作的程序员,恐怕不是系统管理员。

    另一个注意事项是:虽然我的php应用程序都返回此错误 C:\inetpub\wwwroot\phpinfo.php 文件没有(此文件有一行代码: phpinfo(); ).该文件有效。

    使现代化

    当我在 C:\inetpub\wwwroot 目录,它工作。但同一文件导致我的网站出现问题错误: C:\Users\Katie\Documents\Work\Website Working Copy\ 。此目录映射到IIS中“默认网站”内的web应用程序。IUSR和IIS\U IUSR对此文件夹具有权限。如果我分享phpinfo()中的内容,是否有可能解释为什么会发生这种情况?

    使现代化

    我已经用PHP 5.6的最新非线程安全版本完全替换了PHP安装。

    这是php。ini文件现在位于 C: \程序文件(x86)\PHP\v5。6. (减去所有评论内容):

    [PHP]
    
    engine = On
    short_open_tag = Off
    asp_tags = Off
    precision = 14
    output_buffering = 4096
    zlib.output_compression = Off
    implicit_flush = Off
    unserialize_callback_func =
    serialize_precision = 17
    open_basedir = "C:\inetpub\wwwroot"
    disable_functions =
    disable_classes =
    zend.enable_gc = On
    expose_php = On
    
    ; Resource Limits ;
    max_execution_time = 30
    max_input_time = 60
    memory_limit = 128M
    
    ; Error handling and logging ;
    error_reporting = E_ALL
    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
    track_errors = On
    html_errors = On
    error_log = "php_errors.log"
    
    ; Data Handling ;
    variables_order = "GPCS"
    request_order = "GP"
    register_argc_argv = Off
    auto_globals_jit = On
    post_max_size = 8M
    auto_prepend_file =
    auto_append_file =
    default_mimetype = "text/html"
    default_charset = "UTF-8"
    
    ; Paths and Directories ;
    doc_root =      ; Have also tried doc_root = "C:\inetpub\wwwroot" -- no change
    user_dir =
    extension_dir = "ext"
    enable_dl = Off
    cgi.force_redirect = 0
    cgi.fix_pathinfo=1
    fastcgi.impersonate = 1
    fastcgi.logging = 0
    
    ; File Uploads ;
    file_uploads = On
    upload_max_filesize = 2M
    max_file_uploads = 20
    
    ; Fopen wrappers ;
    allow_url_fopen = On
    allow_url_include = Off
    default_socket_timeout = 60
    
    ; Dynamic Extensions ;
    extension=php_bz2.dll
    extension=php_curl.dll
    extension=php_fileinfo.dll
    extension=php_gd2.dll
    extension=php_gettext.dll
    extension=php_gmp.dll
    extension=php_intl.dll
    extension=php_imap.dll
    extension=php_interbase.dll
    extension=php_ldap.dll
    extension=php_mbstring.dll
    extension=php_exif.dll      ; Must be after mbstring as it depends on it
    extension=php_mysql.dll
    extension=php_mysqli.dll
    extension=php_oci8_12c.dll  ; Use with Oracle Database 12c Instant Client
    extension=php_openssl.dll
    extension=php_pdo_firebird.dll
    extension=php_pdo_mysql.dll
    extension=php_pdo_oci.dll
    extension=php_pdo_odbc.dll
    extension=php_pdo_pgsql.dll
    extension=php_pdo_sqlite.dll
    extension=php_pgsql.dll
    extension=php_shmop.dll
    
    ; Module Settings ;
    
    [CLI Server]
    cli_server.color = On
    
    [Date]
    date.timezone = "America/Chicago"
    
    [filter]
    
    [iconv]
    
    [intl]
    
    [sqlite3]
    
    [Pcre]
    
    [Pdo]
    
    [Pdo_mysql]
    pdo_mysql.cache_size = 2000
    pdo_mysql.default_socket=
    
    [Phar]
    
    [mail function]
    SMTP = localhost
    smtp_port = 25
    mail.add_x_header = On
    
    [SQL]
    sql.safe_mode = Off
    
    [ODBC]
    odbc.allow_persistent = On
    odbc.check_persistent = On
    odbc.max_persistent = -1
    odbc.max_links = -1
    odbc.defaultlrl = 4096
    odbc.defaultbinmode = 1
    
    [Interbase]
    ibase.allow_persistent = 1
    ibase.max_persistent = -1
    ibase.max_links = -1
    ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
    ibase.dateformat = "%Y-%m-%d"
    ibase.timeformat = "%H:%M:%S"
    
    [MySQL]
    mysql.allow_local_infile = On
    mysql.allow_persistent = On
    mysql.cache_size = 2000
    mysql.max_persistent = -1
    mysql.max_links = -1
    mysql.default_port =
    mysql.default_socket =
    mysql.default_host =
    mysql.default_user =
    mysql.default_password =
    mysql.connect_timeout = 60
    mysql.trace_mode = Off
    
    [MySQLi]
    
    mysqli.max_persistent = -1
    mysqli.allow_persistent = On
    mysqli.max_links = -1
    mysqli.cache_size = 2000
    mysqli.default_port = 3306
    mysqli.default_socket =
    mysqli.default_host =
    mysqli.default_user =
    mysqli.default_pw =
    mysqli.reconnect = Off
    
    [mysqlnd]
    mysqlnd.collect_statistics = On
    mysqlnd.collect_memory_statistics = On
    
    [OCI8]
    
    [PostgreSQL]
    pgsql.allow_persistent = On
    pgsql.auto_reset_persistent = Off
    pgsql.max_persistent = -1
    pgsql.max_links = -1
    pgsql.ignore_notice = 0
    pgsql.log_notice = 0
    
    [Sybase-CT]
    sybct.allow_persistent = On
    sybct.max_persistent = -1
    sybct.max_links = -1
    sybct.min_server_severity = 10
    sybct.min_client_severity = 10
    
    [bcmath]
    bcmath.scale = 0
    
    [browscap]
    
    [Session]
    session.save_handler = files
    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.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.hash_function = 0
    session.hash_bits_per_character = 5
    url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
    
    [MSSQL]
    mssql.allow_persistent = On
    mssql.max_persistent = -1
    mssql.max_links = -1
    mssql.min_error_severity = 10
    mssql.min_message_severity = 10
    mssql.compatibility_mode = Off
    mssql.secure_connection = Off
    
    [Assertion]
    
    [COM]
    
    [mbstring]
    
    [gd]
    
    [exif]
    
    [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
    
    [sysvshm]
    
    [ldap]
    ldap.max_links = -1
    
    [mcrypt]
    
    [dba]
    
    [opcache]
    
    [curl]
    
    [openssl]
    

    我有一个测试PHP文件,如下所示:

    <html>
    <head>
        <title>PHP Test</title>
    </head>
    <body>
        <?php echo '<p>Hello World</p>'; ?> 
    </body>
    </html>
    

    因此,重申一下,问题是,当此文件位于C:\inetpub\wwwroot\中时,通过 http://mymachinename/temphello.php ,它工作正常。但当它位于我通过IIS在“默认网站”下设置的一个虚拟目录(实际上是应用程序)中时,通过 http://mymachinename/applicationname/temphello.php ,它返回“未指定输入文件”

    我需要PHP来工作,无论虚拟目录位于何处。我知道这是可能的,因为它工作了很多年,直到上周,当我清除应用程序缓存后,它就神秘地停止了工作。

    使现代化

    在php中注释掉doc\u root。ini文件证明是朝着正确方向迈出的一步。它现在可以在“我的文档”文件夹中的虚拟目录中工作。但我的开发网站仍然存在错误,这些网站位于我的OneDrive文件夹中。我想我可以在我的文档中复制并用于开发,但如果我遗漏了什么,我真的希望避免这样做。

    4 回复  |  直到 7 年前
        1
  •  2
  •   Katerine459    6 年前

    在经历了重重打击之后,我终于发现这一切都是由于PHP和OneDrive的一个bug造成的。 https://bugs.php.net/bug.php?id=75384

    将PHP升级到最新版本,还关闭了OneDrive设置,“节省空间并在使用时下载文件”重新启动后,它终于工作了。

        2
  •  1
  •   Kachinga    4 年前

    我的解决方案是对两者都发表评论

    ;打开\u basedir

    ;doc\u根目录

        3
  •  0
  •   Hopper    7 年前

    此错误意味着您的PHP在IIS服务器中配置不正确。 问题的解决: 打开php。ini文件并查看Doc\u根设置。 值的示例可以是以下设置:

    doc_root = "d:\Inetpub\wwwroot"
    

    此设置上方的注释表示:

    ; The root of the PHP pages, used only if nonempty.
    ; if PHP was not compiled with FORCE_REDIRECT, you    
    SHOULD set doc_root
    ; if you are running php as a CGI under any web server
    (other than IIS)
    ; see documentation for security issues. The alternate is     
    to use the
    ; cgi.force_redirect configuration below
    

    如果您在ISAPI模式下使用PHP,而不是CGI,请尝试注释该设置,使其看起来像这样:

    ; doc_root = "d:\Inetpub\wwwroot"
    

    然后保存php。ini,然后通过打开命令提示符(开始=>程序=>附件=>命令提示符)重新启动IIS,然后键入命令:

    iisreset
    

    这应该可以解决问题!

        4
  •  0
  •   Katerine459    7 年前

    我在这里找到了解决方案:
    https://www.experts-exchange.com/questions/20983403/PHP-Windows-no-input-file-specified-error-virtual-directory.html

    结果我所要做的就是。。。与所有其他在线指令所说的相反。我不得不在php中注释掉doc\u根行。ini文件。一旦我这样做了,问题就解决了。

    编辑

    说话太早了。事实证明,这使它在我的测试网站上工作,但在我的实际开发网站上却不起作用,这些网站都在OneDrive上。将用新信息更新我的问题。不过,这是朝着正确方向迈出的一步,至少它开辟了一个可能的解决方法。