鍍金池/ 問答/ PHP問答
使勁操 回答

我猜你是在php里用exec開了一個(gè)node.js進(jìn)程執(zhí)行了某個(gè)腳本?你可以自己寫一個(gè)js腳本,通過這個(gè)腳本執(zhí)行你真正要執(zhí)行的腳本,同時(shí)在這個(gè)腳本里catch未被捕獲的異常,以此判斷執(zhí)行是否成功,如果失敗就process.exit(1)。我不是很清楚php的exec是怎么執(zhí)行的,如果這樣不管用的話你可以通過其它進(jìn)程通信的方法告知父進(jìn)程執(zhí)行狀態(tài)

笨尐豬 回答

clipboard.png
Route::resource(':version/user','api/:version.User'); //注冊(cè)一個(gè)資源路由,對(duì)應(yīng)restful各個(gè)方法

Laravel 的查詢構(gòu)造器和 Eloquent ORM 用的是 PDO 的預(yù)查, 目的是防止 SQL 注入

哎呦喂 回答

如果你的lamp環(huán)境配置好了,直接把代碼上傳到對(duì)應(yīng)的web目錄下即可

尕筱澄 回答

為避免種族歧視之嫌,我們只討論站點(diǎn)吧。

題主在站點(diǎn)上的設(shè)計(jì)是有問題的,拿北京-鄭州-廣州舉例(火車從北京到廣州是不可能經(jīng)過上海的),客人選了北京-廣州的班次,但買的是北京-鄭州段,那么:

  • 首先看北京-鄭州段有沒有庫存,有的話就減1;
  • 如果沒有該段庫存,那么找最短的包含該段的庫存,例如北京-漢口,這樣會(huì)北京-漢口的庫存減1,同時(shí)鄭州-漢口的庫存加1。
涼薄 回答

先按天切割,服務(wù)器硬盤小的話可以把太久遠(yuǎn)的下載下來然后服務(wù)器上的刪了

朽鹿 回答

第二級(jí)圖不是你的svn目錄. svn目錄結(jié)構(gòu)不是這種.

應(yīng)該是你的項(xiàng)目并沒有提交到svn里面, 所以更新不出來.

你先在第二圖的項(xiàng)目里, commit, 然后在第一圖中再更新.

耍太極 回答

首先你的一個(gè)思維是很好的,就是利用traits復(fù)用代碼,traits本身設(shè)計(jì)解決PHP無法多繼承和代碼復(fù)用

不過你上面的設(shè)計(jì),我想到的一些問題:

  1. 如何同時(shí)存在一個(gè)服務(wù)的不同版本(難道你又維護(hù)一個(gè)不同版本的traits)
  2. 如何你的類只是繼承了不同功能traits,那為什么直接用相應(yīng)的基類做,要用traits來做,這個(gè)問題值得你思考
  3. traits在實(shí)際開發(fā)中,更多的是充當(dāng)一些抽象的公用部分,比如一個(gè)抽象A類和抽象B類, 他們可能同時(shí)要公用一些方法或什么,你可以用traits
  4. 你提出這個(gè)問題的時(shí)候,我這邊感受到的是你更多要去思考的是怎么設(shè)計(jì)類和怎么設(shè)計(jì)你的軟件架構(gòu)問題
初念 回答

openssl應(yīng)該跟發(fā)郵件沒關(guān)系。估計(jì)是Linux環(huán)境中mail()函數(shù)沒有開啟,可以排查下

乞許 回答

無法顯示是什么情況, 服務(wù)器上有 php 環(huán)境嗎, phpmyadmin依賴php 運(yùn)行環(huán)境的

尋仙 回答

暫時(shí)把防火墻關(guān)閉,還有SElinux。

systemctl stop firewalld.service 

修改/etc/selinux/config文件中設(shè)置SELINUX=disabled ,然后重啟服務(wù)器。


實(shí)在不行的話 修改nginx.conf     #user  nobody;  把這個(gè)打開。

還有可能不是nginx的緣故,mac上防火墻也有關(guān)系。
貓小柒 回答

一開始使用的是MingGW,后來改為使用mingw-w64就解決了問題。Google了一下,應(yīng)該是MingGW中的gcc或者gdb版本太低的問題

葬愛 回答

不知道ab.exe測(cè)試時(shí)什么原理,你自己寫一個(gè)多線程調(diào)用下就知道了會(huì)產(chǎn)生負(fù)數(shù)值的。

//php不會(huì),用java寫了個(gè)test。
import redis.clients.jedis.Jedis;


public class Test {
    
    public static void main(String[] args) throws Exception {
        
        Jedis jedis = getJedis();
        jedis.set("nums", 50+"");
        close(jedis);
        
        for(int i = 0;i < 1000;i++){ //啟動(dòng)1000個(gè)線程
            new Thread(new MyTask()).start();
        }
        
    }
    
    public static  Jedis getJedis(){
        Jedis j = new Jedis("xxxxx", 6379);
        j.auth("xxxx");
        return j;
    }
    
    public static void close(Jedis jedis){
        if(null == jedis){
            return;
        }
        jedis.close();
    }
}

class MyTask implements Runnable{
    @Override
    public void run() {
        Jedis j = Test.getJedis();
         String numStr = j.get("nums");
         Integer nums = Integer.valueOf(numStr);
        
        if(nums > 1){
             j.decr("nums");
        }else{
             System.out.println(nums);
        }
        Test.close(j);
    }
}

輸出結(jié)果出現(xiàn)負(fù)值。

我以為 回答

說下自己的理解,供參考。假設(shè)題主了解網(wǎng)絡(luò)編程和計(jì)算機(jī)系統(tǒng)的一些基本概念。

簡(jiǎn)單概括來說,事件驅(qū)動(dòng)是實(shí)現(xiàn)并發(fā)處理的一種方式。

我們就以HTTP請(qǐng)求的處理過程為例,為簡(jiǎn)化說明,僅考慮網(wǎng)絡(luò)IO,不考慮文件IO和數(shù)據(jù)庫等其他過程,也不考慮多核系統(tǒng)。
考慮采用如下最簡(jiǎn)模型來處理HTTP請(qǐng)求:

main_loop:
  accept() 
  recv()  
  parse() 
  send() 
  close() 

來一個(gè)連接,讀取數(shù)據(jù)(請(qǐng)求),解析請(qǐng)求內(nèi)容,返回?cái)?shù)據(jù)(應(yīng)答)。
同一時(shí)間只為一個(gè)客戶端服務(wù)。在為A客戶端服務(wù)的過程中,B客戶端必須等待。

這種方式非常簡(jiǎn)單直接,容易理解,但其無法滿足現(xiàn)實(shí)場(chǎng)景的需要——不支持并發(fā)。
現(xiàn)實(shí)中,客戶端的請(qǐng)求是并發(fā)的:即當(dāng)一個(gè)客戶端的請(qǐng)求還在處理時(shí),另外一個(gè)客戶端的請(qǐng)求就會(huì)達(dá)到,甚至多個(gè)客戶端的請(qǐng)求同時(shí)達(dá)到。
而且,recv 和 send等涉及網(wǎng)絡(luò)操作的API由于網(wǎng)絡(luò)數(shù)據(jù)發(fā)送與到達(dá)的不確定性,可能需要等待,CPU會(huì)空閑下來——但這種模型下即使CPU空閑了也無法處理其他客戶端的請(qǐng)求,浪費(fèi)了CPU。

我們采用如下多線程模型,可以解決上述問題:

main_loop:
  accept() 
  start_thread(thread_loop)

thread_loop:    
    recv()  
    parse() 
    send() 
    close() 
    exit thread()

即每個(gè)客戶端在一個(gè)獨(dú)立的線程中處理。
當(dāng)一個(gè)客戶端的線程執(zhí)行網(wǎng)絡(luò)操作需要等待時(shí),會(huì)被操作系統(tǒng)調(diào)度出去,執(zhí)行其他需要干活兒的線程。
似乎完美了解決了我們的問題?
然而并沒有。
因?yàn)椴僮飨到y(tǒng)創(chuàng)建線程的開銷是比較大的,能夠支持的線程數(shù)量是有限的,通常是幾萬的級(jí)別,如果線程太多,就會(huì)有很多的CPU浪費(fèi)在了線程的創(chuàng)建、銷毀、調(diào)度等管理操作上。

所以為了充分發(fā)揮CPU的能力,支持更多的并發(fā)數(shù)量,,在Linux上有另外一種處理并發(fā)的方式:
內(nèi)核提供了監(jiān)聽大量網(wǎng)絡(luò)連接(句柄)可讀、可寫等事件的機(jī)制和接口。
應(yīng)用把需要監(jiān)聽對(duì)象以及關(guān)心的事件注冊(cè)給內(nèi)核,內(nèi)核在有事件達(dá)到時(shí)通知應(yīng)用處理。
基于這種機(jī)制處理并發(fā)就是事件驅(qū)動(dòng)。

事件驅(qū)動(dòng)機(jī)制的基本模型是:

create_listen_socket()
register_event_for_listen_socket()
main_loop:
    wait_for_event()
    check_events:
         if listen_socket has event(new client coming) :
               accept()
               register_event_for_client_socket()
        if client_socket has event(new data coming):
               recv()                       
               parse()
               send()              

但這里有一個(gè)問題,有可能一個(gè)客戶端剛讀取了一部分?jǐn)?shù)據(jù),就沒了,剩下的還在網(wǎng)絡(luò)中沒過來,需要繼續(xù)等待。
這就需要把當(dāng)前的讀取內(nèi)容和請(qǐng)求處理狀態(tài)(也即上下文)保存起來,繼續(xù)處理其他客戶端的事件。
然后下次這個(gè)客戶端再有事件到來時(shí)再找回上下文繼續(xù)處理。
這其實(shí)需要應(yīng)用自己做一些任務(wù)調(diào)度相關(guān)的上下文保存和切換工作。

當(dāng)使用多線程處理并發(fā)時(shí),操作系統(tǒng)幫我們做了這些工作,我們無需關(guān)心任務(wù)切換。
因?yàn)橐粋€(gè)線程就只處理一個(gè)客戶端,反復(fù)調(diào)用recv把一個(gè)請(qǐng)求的數(shù)據(jù)讀完然后解析處理就可以了,也不用擔(dān)心沒數(shù)據(jù)到來時(shí),recv阻塞了其他客戶端的處理。
所以多線程編寫并發(fā)代碼非常簡(jiǎn)單直接。

如上,事件驅(qū)動(dòng)機(jī)制是Linux上解決并發(fā)問題的一種高效編程模型。
應(yīng)用反復(fù)探測(cè)事件,對(duì)接收到的事件進(jìn)行逐個(gè)處理的過程就是事件循環(huán)。

那么同步和異步概念體現(xiàn)在哪里呢?

所謂同步就是我們執(zhí)行一個(gè)任務(wù),一直等待任務(wù)執(zhí)行結(jié)束。
所謂異步就是我們執(zhí)行一個(gè)任務(wù),不等待任務(wù)執(zhí)行結(jié)束,繼續(xù)去干其他活兒,任務(wù)結(jié)果后有個(gè)通知,或者干脆不關(guān)心任務(wù)的執(zhí)行結(jié)果。

在多線程模型中,每接收到一個(gè)新的客戶端就創(chuàng)建一個(gè)線程處理,這就是一種異步處理。
在事件驅(qū)動(dòng)模型中,當(dāng)沒有數(shù)據(jù)可讀時(shí),就把這個(gè)客戶端繼續(xù)放到監(jiān)聽隊(duì)列中監(jiān)聽,也是一種異步。

如果我們考慮文件IO,把IO請(qǐng)求丟給另外一個(gè)或一組線程(線程池)處理,處理完后通知主線程,也是一種異步。

墨小白 回答

v-for 循環(huán)的次數(shù)取決于你要循環(huán)的元素的length

你想達(dá)到每次取倆個(gè)值

var l = 0;  //全局
//每次觸發(fā)下一頁執(zhí)行
var newArr = arr.slice(l,l+2)
l = l + 2
v-for 循環(huán) newArr數(shù)組
不討喜 回答

官網(wǎng):MySQL :: MySQL 5.5 Reference Manual :: C.10.4 Limits on Table Column Count and Row Size: https://dev.mysql.com/doc/ref...

MySQL has hard limit of 4096 columns per table, but the effective maximum may be less for a given table. The exact column limit depends on several factors:

還有,如果都考慮列數(shù)極限了,那么就要思考一下設(shè)計(jì)是不是有問題了