一位同事曾告诉我,当Linux上的所有内容都无法调试时,最后一个选项是使用strace.
我试图学习这个奇怪工具背后的科学,但我不是系统管理大师,我没有真正得到结果.
所以,
简而言之,简单来说,这些东西是如何工作的?
我有index.php,我想包括class.twitter.php在里面,我该怎么做?
希望当我将下面的代码放在index.php中时它会起作用.
$t = new twitter();
$t->username = 'user';
$t->password = 'password';
$data = $t->publicTimeline();
Run Code Online (Sandbox Code Playgroud) 只是想知道是否有人有关于"成本"的信息,包括一个包含100个类文件的大型(600K或更多)php文件.与自动加载单个文件(例如在找到匹配项之前搜索多个目录)相比,它真的有很大的不同吗?
APC缓存会让这个成本微不足道吗?
可能重复:
为什么require_once这么糟糕?
我读的地方,在include_once和require_once在PHP语句比其非曾经的同行慢.这是一个显着的放缓?是否有任何测试或研究,并在最近的PHP版本中进行了更改?
PHP缓存include请求吗?我想知道如何清理我的代码,并考虑使用更多includes.考虑以下方案.
[foreach answer] [include answer.tpl.php] [/foreach]
Run Code Online (Sandbox Code Playgroud)
这需要包括answer.tpl.php数百次.
它缓存了吗?它会对性能有影响吗?这被认为是一种好习惯吗?坏?
回应@Aaron Murray的回答
不,那不行.仅仅_once是防止包含同一文件不止一次的概念.(以防止例如覆盖常量值导致的错误)
实际的例子如下:
# index.php
<?php
$array = array('a', 'b', 'c');
$output = '';
foreach($array as $e)
{
$output .= require_once 'test.php';
}
echo $output;
# test.php
<?php
return $e;
Run Code Online (Sandbox Code Playgroud) 这是一个简单的问题,一小时的谷歌搜索似乎没有解决.你如何捕获PHP中的失败包含?对于以下代码:
try {
include_once 'mythical_file';
} catch (Exception $e) {
exit('Fatal');
}
echo '?';
Run Code Online (Sandbox Code Playgroud)
如果mythical_file不存在,我得到输出'?'.我知道PHP无法捕获失败,因为它触发了警告错误,但是在这里?捕获失败的包含的最佳方法是什么?例如,以下工作:
(include_once 'unicorn') or exit('!');
Run Code Online (Sandbox Code Playgroud)
但它不会触发异常,所以我无法检索文件,行和堆栈上下文.
我是Laravel新手。在Homestead中使用本地开发环境尝试运行简单测试
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
class UserTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$response = $this->get('/');
$response->assertStatus(200);
}
}
Run Code Online (Sandbox Code Playgroud)
route / web.php:
Route::get('/', function () {
return view('main');
});
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
Run Code Online (Sandbox Code Playgroud)
运行phpunit返回404错误
vagrant @ homestead:〜/ code / laravel $ phpunit Sebastian Bergmann和贡献者的PHPUnit 6.4.3。
。F。3/3(100%)
时间:1.07秒,内存:10.00MB
有1个失败:
1)Tests \ Feature \ UserTest :: testBasicTest预期状态码为200,但收到404。断言false为true失败。
/home/vagrant/code/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php:78 /home/vagrant/code/laravel/tests/Feature/UserTest.php:25
我试图用这些方法修复它
1. Laravel phpunit总是404 updateTestCase.php
protected $baseUrl = 'http://localhost'
change …Run Code Online (Sandbox Code Playgroud) 我在这里学习模式,对PHP来说很新,所以我正在使用代码示例.请原谅我在这里使用'global',但我想了解php变量范围.
这是myGlobals.php:
<?php
global $db_server;
// other code not shown
?>
Run Code Online (Sandbox Code Playgroud)
这是connectToDb.php:
<?php
require_once 'myGlobals.php';
// no declared functions in this file, all inline code
$db_server = mysql_connect(.....);
mysql_select_db( "theDatabase", $db_server);
?>
Run Code Online (Sandbox Code Playgroud)
这是addDbRecords.php:
<?php
require_once 'myGlobals.php';
// other inline code.....
doAddDeleteRecord($db_server);
function doAddDeleteRecord($db_server)
{
//global $db_server;
if( !mysql_query($query, $db_server))
{
// handle the error...
}
}
?>
Run Code Online (Sandbox Code Playgroud)
这是index.php:
<?php
require_once 'myGlobals.php';
require_once 'connectToDb.php';
require_once 'addDbRecords.php';
// this is simplified, just trying to show that everything in inline code
?>
Run Code Online (Sandbox Code Playgroud)
这是问题所在.当我 …
可能重复:
为什么require_once这么糟糕?
当PHP包含文件时,我假设它将文件名存储在数组中.
然后,当包含另一个文件时,它会检查该数组是否已经包含它,对吧?
那么这里最重要的是什么?为什么人们如此害怕这个阵列检查?这不像是你包含了数百万个文件......
in_array检查是一直进行的.我几乎在所有功能中使用它们:)
假设我们preg_replace在数百万个帖子字符串上使用它:
function makeClickableLinks($s) {
return preg_replace('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@', '<a href="$1" target="_blank">$1</a>', $s);
}
Run Code Online (Sandbox Code Playgroud)
假设所有帖子中只有 10% 包含链接,strpos($string, 'http') !== false在调用之前检查会更快preg_replace()吗?如果是这样,为什么?不在preg_replace()内部执行一些预测试?
我有一个包括类的问题.这是一个解释问题的简单示例:
班级号 1(路径:/home/day/Class_A.php):
class Class_A {
public function sayHi() {
echo "Good day";
}
}
Run Code Online (Sandbox Code Playgroud)
班级号 2(路径:/home/test/Class_B.php):
class Class_B {
public function greeting() {
if(class_exists("Class_A")!=true)
include "../day/Class_A.php";
$test = new Class_A();
$test->sayHi();
}
}
Run Code Online (Sandbox Code Playgroud)
PHP文件(路径:/home/php.php)
if(class_exists("Class_B")!=true)
include "test/Class_B.php";
$g = new Class_B;
$g->greeting();
Run Code Online (Sandbox Code Playgroud)
问题是当php.php包含Class_B且Class_B包含Class_A时,Class_B无法打开Class_B,因为类的对象的路径现在与php.php文件相同.
我的问题是:有没有一种简单的方法来解决这个问题?