我最近更新了我的一台服务器,从那时起,我遇到了一些特定 PHP 命令的问题(见下文)。我相信这是一个配置问题,但我已经调查了几件事并且不知道更多。所以也许你们中的一个人有一个好主意:
我使用以下代码来显示内部网站上的标准 Logo 或用户定义的 Logo :
if(L_HEADER) {
$logo = L_HEADER;
}
else {
$logo = 'logo.png';
}
$properties = getimagesize(CONFIG_URL . 'images/' . $logo)
L_HEADER 和 CONFIG_URL 是具有预定义值的常量(另一个文件):
连接工作正常,Apache 日志文件的错误消息也证实了这一点:
PHP Warning: getimagesize(http://billing.intranet.opb/images/opb_beta.png): failed to open stream: HTTP request failed! HTTP/1.1 404 NOT FOUND
in /var/www/billing/templates/header.inc.php on line 42
所以第一个显而易见的结论是:路径是错误的。但事实并非如此,相信我。我检查了 1.000 次。事实上,第一个好奇是图像在同一文件的代码中被正确显示和引用了几行:
echo '<img src="' . CONFIG_URL . 'images/' . $logo . '"
width="' . $properties[0] . '" height = "' . $properties[1] . '" />";
正如我得到上面提到的错误,高度和宽度是“0”,但是查看源代码,URL 没问题,手动访问它打开图像,当用手动值替换宽度和高度时,图像是显示得很好。
更好奇的是(还有我现在的 finx),当将 getimagesize 更改为以下内容时,它工作得很好:
$properties = getimagesize($_SERVER['DOCUMENT_ROOT'] . /public_html/images/' . $logo);
我会提到我正在使用 Apache 的重定向;这就是为什么在 URL 中看不到“public_html”,而在第二个示例的绝对路径中却看到它的原因。
“file_exists”也是如此。 URL 不起作用,同一文件的绝对本地路径起作用。
另一个好奇心:在另一段代码中,我正在在线检查更新。在那里,我使用带有 file_exists 和 fopen 的“真实”公共(public) URL。我看起来像这样并且工作得很好:
if(file_exists('http://desk.co.cr/df_stable.txt') {
if(($handle = fopen('http://desk.co.cr/df_stable.txt', 'r')) !== FALSE) {
// some other code
}
}
现在,我已经检查过的东西:
一些背景信息:
目前,我没有想法。
最佳答案
隐藏在您的问题中的是您已经找到的重要线索:
Another curiosity: in another piece of code, I am checking online for updates. There, I am using a "real", public URL
因此,失败的 URL 是非公共(public)域,您的 PC 已配置为查找正确的 IP 地址。这很可能是通过运行本地 DNS 服务器或配置 PC 的“主机”文件以硬编码该域的地址来完成的。
然而,当您从服务器本身请求 URL 时,一个完全不同的 DNS 配置在起作用,所以它可能根本不知道该服务器在哪里 - 即使它是它自己!您需要配置服务器的 DNS 设置或 /etc/hosts 以匹配您 PC 上的设置。
一个相关的可能性是服务器是配置了相同的地址查找,但路由器不允许它以这种方式连接到自身。一种解决方法是将主机文件条目指向 127.0.0.1 并配置 Apache 以匹配。
如果您可以在服务器上获得命令行,您可以尝试:
nslookup billing.intranet.opb
# if that returns the right IP address, see if it's reachable:
ping billing.intranet.opb
# and if it's the right server, it will be listening on port 80:
telnet billing.intranet.opb 80
# telnet will either time out, or connect and give you a prompt
如果 telnet 连接,您甚至可以手动编写一个 HTTP 请求(一个空行完成请求;不要输入太长时间,否则服务器将退出)例如:
HTTP/1.1 HEAD /
Host: billing.intranet.opb
关于php - file_exists 或 getimagesize 仅适用于本地绝对文件路径,但不适用于 PHP 中的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32619282/
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
CSV.open(name,"r").eachdo|row|putsrowend我得到以下错误:CSV::MalformedCSVErrorUnquotedfieldsdonotallow\ror\n文件名是一个.txt制表符分隔文件。我是专门做的。我有一个.csv文件,我转到excel,并将文件保存为.txt制表符分隔的文件。所以它是制表符分隔的。CSV.open不应该能够读取制表符分隔的文件吗? 最佳答案 尝试像这样指定字段分隔符:CSV.open("name","r",{:col_sep=>"\t"}).eachdo|row|
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
当我使用has_one时,它工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290
我不知道为什么,但是当我设置这个设置时它无法编译设置:static_cache_control,[:public,:max_age=>300]这是我得到的syntaxerror,unexpectedtASSOC,expecting']'(SyntaxError)set:static_cache_control,[:public,:max_age=>300]^我只想将“过期”header设置为css、javaascript和图像文件。谢谢。 最佳答案 我猜您使用的是Ruby1.8.7。Sinatra文档中显示的语法似乎是在Ruby1.
如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b
这个问题在这里已经有了答案:Whatdoes`if__FILE__==$0`meaninRuby(6个答案)关闭6年前。我在审查Ruby代码时偶然发现了这个语法。代码是:if__FILE__==$PROGRAM_NAME#somecode...end我想__FILE__是一个变量,可以让我获取我所在文件的名称?但是$PROGRAM_NAME简化了什么?另外,为什么这个if语句是必需的,因为程序可以使用或不使用它?