JQ插件ajaxFileUpload、php實(shí)現(xiàn)圖片,數(shù)據(jù)同時(shí)上傳,_PHP教程
Jul 12, 2016 am 08:54 AMJQ插件ajaxFileUpload、php實(shí)現(xiàn)圖片,數(shù)據(jù)同時(shí)上傳,
代碼結(jié)構(gòu)如下:
?
1、HTML代碼,沒(méi)必要解釋了。
<span> 1</span> <span><!</span><span>DOCTYPE html</span><span>></span> <span> 2</span> <span><</span><span>html</span><span>></span> <span> 3</span> <span><</span><span>head</span><span>></span> <span> 4</span> <span><</span><span>meta </span><span>charset</span><span>="UTF-8"</span><span>></span> <span> 5</span> <span><</span><span>title</span><span>></span>文件上傳<span></</span><span>title</span><span>></span> <span> 6</span> <span><</span><span>script </span><span>src</span><span>="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"</span><span>></</span><span>script</span><span>></span> <span> 7</span> <span><</span><span>script </span><span>src</span><span>="uploads/ajaxFileUpload.js"</span><span> type</span><span>="text/javascript"</span><span> charset</span><span>="utf-8"</span><span>></</span><span>script</span><span>></span> <span> 8</span> <span><</span><span>script </span><span>type</span><span>="text/javascript"</span><span>></span> <span> 9</span> <span> $(</span><span>function</span><span>(){ </span><span>10</span> <span> $(</span><span>'</span><span>#ti</span><span>'</span><span>).click(</span><span>function</span><span>(){ </span><span>11</span> <span>var</span><span> data </span><span>=</span><span> { name: </span><span>'</span><span>my name</span><span>'</span><span>, description: </span><span>'</span><span>short description</span><span>'</span><span> } </span><span>12</span> <span> $.ajaxFileUpload({ </span><span>13</span> <span> url: </span><span>'</span><span>up.php</span><span>'</span><span>, </span><span>14</span> <span> secureuri: </span><span>false</span><span>, </span><span>15</span> <span> data: data, </span><span>16</span> <span> fileElementId: </span><span>'</span><span>upf</span><span>'</span><span>, </span><span>17</span> <span> dataType: </span><span>'</span><span>json</span><span>'</span><span>, </span><span>18</span> <span> success: </span><span>function</span><span> (data) { </span><span>19</span> <span>//</span><span> var datejson=eval(data);</span> <span>20</span> <span>//</span><span>console.log(data[0].path_name)</span> <span>21</span> <span> $(</span><span>'</span><span>#im</span><span>'</span><span>).append(</span><span>'</span><span><img src="/static/imghw/default1.png" data-src="</span alt="JQ插件ajaxFileUpload、php實(shí)現(xiàn)圖片,數(shù)據(jù)同時(shí)上傳,_PHP教程" ><span>'</span><span>+</span><span>data[</span><span>0</span><span>].path_name</span><span>+</span><span>'</span><span>" class="lazy"</span><span>+</span><span>data[</span><span>0</span><span>].path_name</span><span>+</span><span>'</span><span>"></span><span>'</span><span>) </span><span>22</span> <span>//</span><span>console.log('<img src="/static/imghw/default1.png" data-src="'+data[0].path_name+'" class="lazy"+data[0].path_name+'" alt="JQ插件ajaxFileUpload、php實(shí)現(xiàn)圖片,數(shù)據(jù)同時(shí)上傳,_PHP教程" >')</span> <span>23</span> <span> }, </span><span>24</span> <span> error: </span><span>function</span><span> (data) { </span><span>25</span> <span> console.log(data) </span><span>26</span> <span> } </span><span>27</span> <span> }); </span><span>28</span> <span>29</span> <span> }) </span><span>30</span> <span>31</span> <span> }) </span><span>32</span> <span></</span><span>script</span><span>></span> <span>33</span> <span></</span><span>head</span><span>></span> <span>34</span> <span><</span><span>body</span><span>></span> <span>35</span> <span><!--</span><span><form action="up.php" method="post" enctype="multipart/form-data"> </span><span>36</span> <span> </form></span><span>--></span> <span>37</span> <span><</span><span>input </span><span>type</span><span>="file"</span><span> name</span><span>="upfm"</span><span> id</span><span>="upf"</span><span> value</span><span>=""</span> <span>/></span> <span>38</span> <span><</span><span>input </span><span>id</span><span>='ti' </span><span>type</span><span>="button"</span><span> value</span><span>="提交"</span><span>/></span> <span>39</span> <span>40</span> <span><</span><span>div </span><span>id</span><span>="im"</span><span>></span> <span>41</span> <span>42</span> <span></</span><span>div</span><span>></span> <span>43</span> <span>44</span> <span></</span><span>body</span><span>></span> <span>45</span> <span>46</span> <span></</span><span>html</span><span>></span>
2、關(guān)于ajaxFileUpload插件,在下面代碼中如果你使用的是JQ1.9以上請(qǐng)復(fù)制1-12到你的ajaxFileUpload代碼中,JQ在很早就廢棄了handleError方法。注釋關(guān)于代碼的解釋很清楚。
<span> 1</span> <span>jQuery.extend({ </span><span> 2</span> handleError: <span>function</span><span>( s, xhr, status, e ) { </span><span> 3</span> <span> 4</span> <span>if</span><span> ( s.error ) { </span><span> 5</span> s.error.call( s.context ||<span> s, xhr, status, e ); </span><span> 6</span> <span> } </span><span> 7</span> <span> 8</span> <span> 9</span> <span>if</span><span> ( s.global ) { </span><span> 10</span> (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError"<span>, [xhr, s, e] ); </span><span> 11</span> <span> } </span><span> 12</span> <span> }, </span><span> 13</span> createUploadIframe: <span>function</span> (id, uri) {<span>//</span><span>id為當(dāng)前系統(tǒng)時(shí)間字符串,uri是外部傳入的json對(duì)象的一個(gè)參數(shù)</span> <span> 14</span> <span>//</span><span>create frame</span> <span> 15</span> <span>var</span> frameId = 'jUploadFrame' + id; <span>//</span><span>給iframe添加一個(gè)獨(dú)一無(wú)二的id</span> <span> 16</span> <span>var</span> iframeHtml = '<iframe id="' + frameId + '" name="' + frameId + '">//</span><span>創(chuàng)建iframe元素</span> <span> 17</span> <span>if</span> (window.ActiveXObject) {<span>//</span><span>判斷瀏覽器是否支持ActiveX控件</span> <span> 18</span> <span>if</span> (<span>typeof</span> uri == 'boolean'<span>) { </span><span> 19</span> iframeHtml += ' src="' + 'javascript:false' + '"'<span>; </span><span> 20</span> } <span>else</span> <span>if</span> (<span>typeof</span> uri == 'string'<span>) { </span><span> 21</span> iframeHtml += ' src="' + uri + '"'<span>; </span><span> 22</span> <span> } </span><span> 23</span> <span> } </span><span> 24</span> iframeHtml += ' />'<span>; </span><span> 25</span> jQuery(iframeHtml).appendTo(document.body); <span>//</span><span>將動(dòng)態(tài)iframe追加到body中</span> <span> 26</span> <span>return</span> jQuery('#' + frameId).get(0); <span>//</span><span>返回iframe對(duì)象</span> <span> 27</span> <span> }, </span><span> 28</span> createUploadForm: <span>function</span> (id, fileElementId, data) {<span>//</span><span>id為當(dāng)前系統(tǒng)時(shí)間字符串,fileElementId為頁(yè)面<input type='file' />的id,data的值需要根據(jù)傳入json的鍵來(lái)決定</span> <span> 29</span> <span>//</span><span>create form </span> <span> 30</span> <span>var</span> formId = 'jUploadForm' + id; <span>//</span><span>給form添加一個(gè)獨(dú)一無(wú)二的id</span> <span> 31</span> <span>var</span> fileId = 'jUploadFile' + id; <span>//</span><span>給<input type='file' />添加一個(gè)獨(dú)一無(wú)二的id</span> <span> 32</span> <span>var</span> form = jQuery('<form action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data" ></form>'); <span>//</span><span>創(chuàng)建form元素</span> <span> 33</span> <span>if</span> (data) {<span>//</span><span>通常為false</span> <span> 34</span> <span>for</span> (<span>var</span> i <span>in</span><span> data) { </span><span> 35</span> jQuery('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form); <span>//</span><span>根據(jù)data的內(nèi)容,創(chuàng)建隱藏域,這部分我還不知道是什么時(shí)候用到。估計(jì)是傳入json的時(shí)候,如果默認(rèn)傳一些參數(shù)的話要用到。</span> <span> 36</span> <span> } </span><span> 37</span> } <span>var</span> oldElement = jQuery('#' + fileElementId); <span>//</span><span>得到頁(yè)面中的<input type='file' />對(duì)象</span> <span> 38</span> <span>var</span> newElement = jQuery(oldElement).clone(); <span>//</span><span>克隆頁(yè)面中的<input type='file' />對(duì)象</span> <span> 39</span> jQuery(oldElement).attr('id', fileId); <span>//</span><span>修改原對(duì)象的id</span> <span> 40</span> jQuery(oldElement).before(newElement); <span>//</span><span>在原對(duì)象前插入克隆對(duì)象</span> <span> 41</span> jQuery(oldElement).appendTo(form); <span>//</span><span>把原對(duì)象插入到動(dòng)態(tài)form的結(jié)尾處</span> <span> 42</span> <span>//</span><span>set attributes</span> <span> 43</span> jQuery(form).css('position', 'absolute'); <span>//</span><span>給動(dòng)態(tài)form添加樣式,使其浮動(dòng)起來(lái),</span> <span> 44</span> jQuery(form).css('top', '-1200px'<span>); </span><span> 45</span> jQuery(form).css('left', '-1200px'<span>); </span><span> 46</span> jQuery(form).appendTo('body'); <span>//</span><span>把動(dòng)態(tài)form插入到body中</span> <span> 47</span> <span>return</span><span> form; </span><span> 48</span> <span> }, </span><span> 49</span> ajaxFileUpload: <span>function</span> (s) {<span>//</span><span>這里s是個(gè)json對(duì)象,傳入一些ajax的參數(shù)</span> <span> 50</span> <span>//</span><span> TODO introduce global settings, allowing the client to modify them for all requests, not only timeout </span> <span> 51</span> s = jQuery.extend({}, jQuery.ajaxSettings, s); <span>//</span><span>此時(shí)的s對(duì)象是由jQuery.ajaxSettings和原s對(duì)象擴(kuò)展后的對(duì)象</span> <span> 52</span> <span>var</span> id = <span>new</span> Date().getTime(); <span>//</span><span>取當(dāng)前系統(tǒng)時(shí)間,目的是得到一個(gè)獨(dú)一無(wú)二的數(shù)字</span> <span> 53</span> <span>var</span> form = jQuery.createUploadForm(id, s.fileElementId, (<span>typeof</span> (s.data) == 'undefined' ? <span>false</span> : s.data)); <span>//</span><span>創(chuàng)建動(dòng)態(tài)form</span> <span> 54</span> <span>var</span> io = jQuery.createUploadIframe(id, s.secureuri); <span>//</span><span>創(chuàng)建動(dòng)態(tài)iframe</span> <span> 55</span> <span>var</span> frameId = 'jUploadFrame' + id; <span>//</span><span>動(dòng)態(tài)iframe的id</span> <span> 56</span> <span>var</span> formId = 'jUploadForm' + id; <span>//</span><span>動(dòng)態(tài)form的id</span> <span> 57</span> <span>//</span><span> Watch for a new set of requests</span> <span> 58</span> <span>if</span> (s.global && !jQuery.active++) {<span>//</span><span>當(dāng)jQuery開(kāi)始一個(gè)ajax請(qǐng)求時(shí)發(fā)生</span> <span> 59</span> jQuery.event.trigger("ajaxStart"); <span>//</span><span>觸發(fā)ajaxStart方法</span> <span> 60</span> } <span>var</span> requestDone = <span>false</span>; <span>//</span><span>請(qǐng)求完成標(biāo)志</span> <span> 61</span> <span>//</span><span> Create the request object</span> <span> 62</span> <span>var</span> xml = {}; <span>if</span><span> (s.global) </span><span> 63</span> jQuery.event.trigger("ajaxSend", [xml, s]); <span>//</span><span>觸發(fā)ajaxSend方法</span> <span> 64</span> <span>//</span><span> Wait for a response to come back</span> <span> 65</span> <span>var</span> uploadCallback = <span>function</span> (isTimeout) {<span>//</span><span>回調(diào)函數(shù)</span> <span> 66</span> <span>var</span> io = document.getElementById(frameId); <span>//</span><span>得到iframe對(duì)象</span> <span> 67</span> <span>try</span> { <span>if</span> (io.contentWindow) {<span>//</span><span>動(dòng)態(tài)iframe所在窗口對(duì)象是否存在</span> <span> 68</span> xml.responseText = io.contentWindow.document.body ? io.contentWindow.document.body.innerHTML : <span>null</span><span>; </span><span> 69</span> xml.responseXML = io.contentWindow.document.XMLDocument ?<span> io.contentWindow.document.XMLDocument : io.contentWindow.document; </span><span> 70</span> } <span>else</span> <span>if</span> (io.contentDocument) {<span>//</span><span>動(dòng)態(tài)iframe的文檔對(duì)象是否存在</span> <span> 71</span> xml.responseText = io.contentDocument.document.body ? io.contentDocument.document.body.innerHTML : <span>null</span><span>; </span><span> 72</span> xml.responseXML = io.contentDocument.document.XMLDocument ?<span> io.contentDocument.document.XMLDocument : io.contentDocument.document; </span><span> 73</span> <span> } </span><span> 74</span> } <span>catch</span><span> (e) { </span><span> 75</span> jQuery.handleError(s, xml, <span>null</span><span>, e); </span><span> 76</span> } <span>if</span> (xml || isTimeout == "timeout") {<span>//</span><span>xml變量被賦值或者isTimeout == "timeout"都表示請(qǐng)求發(fā)出,并且有響應(yīng)</span> <span> 77</span> requestDone = <span>true</span>; <span>//</span><span>請(qǐng)求完成</span> <span> 78</span> <span>var</span> status; <span>try</span><span> { </span><span> 79</span> status = isTimeout != "timeout" ? "success" : "error"; <span>//</span><span>如果不是“超時(shí)”,表示請(qǐng)求成功</span> <span> 80</span> <span>//</span><span> Make sure that the request was successful or notmodified</span> <span> 81</span> <span>if</span> (status != "error") { <span>//</span><span> process the data (runs the xml through httpData regardless of callback)</span> <span> 82</span> <span>var</span> data = jQuery.uploadHttpData(xml, s.dataType); <span>//</span><span>根據(jù)傳送的type類(lèi)型,返回json對(duì)象,此時(shí)返回的data就是后臺(tái)操作后的返回結(jié)果</span> <span> 83</span> <span>//</span><span> If a local callback was specified, fire it and pass it the data</span> <span> 84</span> <span>if</span><span> (s.success) </span><span> 85</span> s.success(data, status); <span>//</span><span>執(zhí)行上傳成功的操作</span> <span> 86</span> <span>//</span><span> Fire the global callback</span> <span> 87</span> <span>if</span><span> (s.global) </span><span> 88</span> jQuery.event.trigger("ajaxSuccess"<span>, [xml, s]); </span><span> 89</span> } <span>else</span> <span> 90</span> <span> jQuery.handleError(s, xml, status); </span><span> 91</span> } <span>catch</span><span> (e) { </span><span> 92</span> status = "error"<span>; </span><span> 93</span> <span> jQuery.handleError(s, xml, status, e); </span><span> 94</span> } <span>//</span><span> The request was completed</span> <span> 95</span> <span>if</span><span> (s.global) </span><span> 96</span> jQuery.event.trigger("ajaxComplete", [xml, s]); <span>//</span><span> Handle the global AJAX counter</span> <span> 97</span> <span>if</span> (s.global && ! --<span>jQuery.active) </span><span> 98</span> jQuery.event.trigger("ajaxStop"); <span>//</span><span> Process result</span> <span> 99</span> <span>if</span><span> (s.complete) </span><span>100</span> <span> s.complete(xml, status); </span><span>101</span> jQuery(io).unbind();<span>//</span><span>移除iframe的事件處理程序</span> <span>102</span> setTimeout(<span>function</span> () {<span>//</span><span>設(shè)置超時(shí)時(shí)間</span> <span>103</span> <span>try</span><span> { </span><span>104</span> jQuery(io).remove();<span>//</span><span>移除動(dòng)態(tài)iframe</span> <span>105</span> jQuery(form).remove();<span>//</span><span>移除動(dòng)態(tài)form</span> <span>106</span> } <span>catch</span><span> (e) { </span><span>107</span> jQuery.handleError(s, xml, <span>null</span><span>, e); </span><span>108</span> <span> } </span><span>109</span> }, 100<span>) </span><span>110</span> xml = <span>null</span> <span>111</span> <span> } </span><span>112</span> } <span>//</span><span> Timeout checker</span> <span>113</span> <span>if</span> (s.timeout > 0) {<span>//</span><span>超時(shí)檢測(cè)</span> <span>114</span> setTimeout(<span>function</span> () { <span>//</span><span> Check to see if the request is still happening</span> <span>115</span> <span>if</span> (!requestDone) uploadCallback("timeout");<span>//</span><span>如果請(qǐng)求仍未完成,就發(fā)送超時(shí)信號(hào)</span> <span>116</span> <span> }, s.timeout); </span><span>117</span> } <span>try</span> { <span>var</span> form = jQuery('#' +<span> formId); </span><span>118</span> jQuery(form).attr('action', s.url);<span>//</span><span>傳入的ajax頁(yè)面導(dǎo)向url</span> <span>119</span> jQuery(form).attr('method', 'POST');<span>//</span><span>設(shè)置提交表單方式</span> <span>120</span> jQuery(form).attr('target', frameId);<span>//</span><span>返回的目標(biāo)iframe,就是創(chuàng)建的動(dòng)態(tài)iframe</span> <span>121</span> <span>if</span> (form.encoding) {<span>//</span><span>選擇編碼方式</span> <span>122</span> jQuery(form).attr('encoding', 'multipart/form-data'<span>); </span><span>123</span> } <span>else</span><span> { </span><span>124</span> jQuery(form).attr('enctype', 'multipart/form-data'<span>); </span><span>125</span> <span> } </span><span>126</span> jQuery(form).submit();<span>//</span><span>提交form表單</span> <span>127</span> } <span>catch</span><span> (e) { </span><span>128</span> jQuery.handleError(s, xml, <span>null</span><span>, e); </span><span>129</span> <span> } </span><span>130</span> jQuery('#' + frameId).load(uploadCallback); <span>//</span><span>ajax 請(qǐng)求從服務(wù)器加載數(shù)據(jù),同時(shí)傳入回調(diào)函數(shù)</span> <span>131</span> <span>return</span> { abort: <span>function</span><span> () { } }; </span><span>132</span> <span> }, </span><span>133</span> uploadHttpData: <span>function</span> (r, type) { <span>var</span> data = !<span>type; </span><span>134</span> data = type == "xml" || data ? r.responseXML : r.responseText; <span>//</span><span> If the type is "script", eval it in global context</span> <span>135</span> <span>if</span> (type == "script"<span>) </span><span>136</span> jQuery.globalEval(data); <span>//</span><span> Get the JavaScript object, if JSON is used.</span> <span>137</span> <span>if</span> (type == "json"<span>) </span><span>138</span> eval("data = " + data); <span>//</span><span> evaluate scripts within html</span> <span>139</span> <span>if</span> (type == "html"<span>) </span><span>140</span> jQuery("<div>").html(data).evalScripts(); <span>return</span><span> data; </span><span>141</span> <span> } </span><span>142</span> })
3。php代碼
<span> 1</span> <?<span>php </span><span> 2</span> <span>//</span><span>print_r($_FILES); </span><span> 3</span> <span>//echo json_encode(print_r($_FILES));</span> <span> 4</span> <span> 5</span> <span>/*</span><span>* </span><span> 6</span> <span> * 生成唯一字符串 </span><span> 7</span> <span> * @return string </span><span> 8</span> <span>*/</span> <span> 9</span> <span>function</span><span> getUniName(){ </span><span> 10</span> <span>return</span> <span>md5</span>(<span>uniqid</span>(<span>microtime</span>(<span>true</span>),<span>true</span><span>)); </span><span> 11</span> <span>} </span><span> 12</span> <span> 13</span> <span>/*</span><span>* </span><span> 14</span> <span> * 得到文件的擴(kuò)展名 </span><span> 15</span> <span> * @param string $filename </span><span> 16</span> <span> * @return string </span><span> 17</span> <span>*/</span> <span> 18</span> <span>function</span> getExt(<span>$filename</span><span>){ </span><span> 19</span> <span>return</span> <span>strtolower</span>(<span>end</span>(<span>explode</span>(".",<span>$filename</span><span>))); </span><span> 20</span> <span>} </span><span> 21</span> <span> 22</span> <span>/*</span><span>* </span><span> 23</span> <span> * 構(gòu)建上傳文件信息 </span><span> 24</span> <span> * @return array </span><span> 25</span> <span>*/</span> <span> 26</span> <span> 27</span> <span>function</span><span> buildInfo(){ </span><span> 28</span> <span>if</span>(!<span>$_FILES</span><span>){ </span><span> 29</span> <span>return</span><span> ; </span><span> 30</span> <span> } </span><span> 31</span> <span>$i</span>=0<span>; </span><span> 32</span> <span>foreach</span>(<span>$_FILES</span> <span>as</span> <span>$v</span><span>){ </span><span> 33</span> <span>//</span><span>單文件</span> <span> 34</span> <span>if</span>(<span>is_string</span>(<span>$v</span>['name'<span>])){ </span><span> 35</span> <span>$files</span>[<span>$i</span>]=<span>$v</span><span>; </span><span> 36</span> <span>$i</span>++<span>; </span><span> 37</span> }<span>else</span><span>{ </span><span> 38</span> <span>//</span><span>多文件</span> <span> 39</span> <span>foreach</span>(<span>$v</span>['name'] <span>as</span> <span>$key</span>=><span>$val</span><span>){ </span><span> 40</span> <span>$files</span>[<span>$i</span>]['name']=<span>$val</span><span>; </span><span> 41</span> <span>$files</span>[<span>$i</span>]['size']=<span>$v</span>['size'][<span>$key</span><span>]; </span><span> 42</span> <span>$files</span>[<span>$i</span>]['tmp_name']=<span>$v</span>['tmp_name'][<span>$key</span><span>]; </span><span> 43</span> <span>$files</span>[<span>$i</span>]['error']=<span>$v</span>['error'][<span>$key</span><span>]; </span><span> 44</span> <span>$files</span>[<span>$i</span>]['type']=<span>$v</span>['type'][<span>$key</span><span>]; </span><span> 45</span> <span>$i</span>++<span>; </span><span> 46</span> <span> } </span><span> 47</span> <span> } </span><span> 48</span> <span> } </span><span> 49</span> <span>return</span> <span>$files</span><span>; </span><span> 50</span> <span>} </span><span> 51</span> <span>function</span> uploadFile(<span>$path</span>="uploads",<span>$allowExt</span>=<span>array</span>("gif","jpeg","png","jpg","wbmp"),<span>$maxSize</span>=2097152,<span>$imgFlag</span>=<span>true</span><span>){ </span><span> 52</span> <span>if</span>(!<span>file_exists</span>(<span>$path</span>)){<span>//</span><span>判斷是否有$path文件夾,沒(méi)有則創(chuàng)建</span> <span> 53</span> <span>mkdir</span>(<span>$path</span>,0777,<span>true</span>);<span>//</span><span>0777表示最大權(quán)限</span> <span> 54</span> <span> } </span><span> 55</span> <span>$i</span>=0<span>; </span><span> 56</span> <span>$files</span>=<span>buildInfo(); </span><span> 57</span> <span>if</span>(!(<span>$files</span>&&<span>is_array</span>(<span>$files</span><span>))){ </span><span> 58</span> <span>return</span><span> ; </span><span> 59</span> <span> } </span><span> 60</span> <span>foreach</span>(<span>$files</span> <span>as</span> <span>$file</span><span>){ </span><span> 61</span> <span>if</span>(<span>$file</span>['error']===UPLOAD_ERR_OK){<span>//</span><span>就是0</span> <span> 62</span> <span>$ext</span>=getExt(<span>$file</span>['name'<span>]); </span><span> 63</span> <span>//</span><span>檢測(cè)文件的擴(kuò)展名</span> <span> 64</span> <span>if</span>(!<span>in_array</span>(<span>$ext</span>,<span>$allowExt</span><span>)){ </span><span> 65</span> <span>exit</span>("非法文件類(lèi)型"<span>); </span><span> 66</span> <span> } </span><span> 67</span> <span>//</span><span>校驗(yàn)是否是一個(gè)真正的圖片類(lèi)型</span> <span> 68</span> <span>if</span>(<span>$imgFlag</span><span>){ </span><span> 69</span> <span>if</span>(!<span>getimagesize</span>(<span>$file</span>['tmp_name'<span>])){ </span><span> 70</span> <span>exit</span>("不是真正的圖片類(lèi)型"<span>); </span><span> 71</span> <span> 72</span> }<span>else</span><span>{ </span><span> 73</span> <span>$file</span>["filesize"]=<span>getimagesize</span>(<span>$file</span>['tmp_name'<span>]); </span><span> 74</span> <span>//</span><span>把文件信息付給$file 傳到前臺(tái)返回時(shí)數(shù)組 </span><span> 75</span> <span> //如 [720, 1280, 2, "width="720" height="1280"", 8, 3, "image/jpeg"]</span> <span> 76</span> <span> } </span><span> 77</span> <span> } </span><span> 78</span> <span>//</span><span>上傳文件的大小</span> <span> 79</span> <span>if</span>(<span>$file</span>['size']><span>$maxSize</span><span>){ </span><span> 80</span> <span>exit</span>("上傳文件過(guò)大"<span>); </span><span> 81</span> <span> } </span><span> 82</span> <span>if</span>(!<span>is_uploaded_file</span>(<span>$file</span>['tmp_name'<span>])){ </span><span> 83</span> <span>exit</span>("不是通過(guò)HTTP POST方式上傳上來(lái)的"<span>); </span><span> 84</span> <span> } </span><span> 85</span> <span>$filename</span>=getUniName().".".<span>$ext</span>;<span>//</span><span>改文件重新命名</span> <span> 86</span> <span>$destination</span>=<span>$path</span>."/".<span>$filename</span><span>; </span><span> 87</span> <span>if</span>(<span>move_uploaded_file</span>(<span>$file</span>['tmp_name'], <span>$destination</span><span>)){ </span><span> 88</span> <span>$file</span>['name']=<span>$filename</span><span>; </span><span> 89</span> <span>$file</span>['path_name']=<span>$destination</span><span>; </span><span> 90</span> <span>unset</span>(<span>$file</span>['tmp_name'],<span>$file</span>['size'],<span>$file</span>['type']);<span>//</span><span>去除不需要傳給的信息</span> <span> 91</span> <span>$uploadedFiles</span>[<span>$i</span>]=<span>$file</span><span>; </span><span> 92</span> <span>$i</span>++<span>; </span><span> 93</span> <span> } </span><span> 94</span> }<span>else</span><span>{ </span><span> 95</span> <span>switch</span>(<span>$file</span>['error'<span>]){ </span><span> 96</span> <span>case</span> 1: <span> 97</span> <span>$mes</span>="超過(guò)了配置文件上傳文件的大小";<span>//</span><span>UPLOAD_ERR_INI_SIZE</span> <span> 98</span> <span>break</span><span>; </span><span> 99</span> <span>case</span> 2: <span>100</span> <span>$mes</span>="超過(guò)了表單設(shè)置上傳文件的大小"; <span>//</span><span>UPLOAD_ERR_FORM_SIZE</span> <span>101</span> <span>break</span><span>; </span><span>102</span> <span>case</span> 3: <span>103</span> <span>$mes</span>="文件部分被上傳";<span>//</span><span>UPLOAD_ERR_PARTIAL</span> <span>104</span> <span>break</span><span>; </span><span>105</span> <span>case</span> 4: <span>106</span> <span>$mes</span>="沒(méi)有文件被上傳1111";<span>//</span><span>UPLOAD_ERR_NO_FILE</span> <span>107</span> <span>break</span><span>; </span><span>108</span> <span>case</span> 6: <span>109</span> <span>$mes</span>="沒(méi)有找到臨時(shí)目錄";<span>//</span><span>UPLOAD_ERR_NO_TMP_DIR</span> <span>110</span> <span>break</span><span>; </span><span>111</span> <span>case</span> 7: <span>112</span> <span>$mes</span>="文件不可寫(xiě)";<span>//</span><span>UPLOAD_ERR_CANT_WRITE;</span> <span>113</span> <span>break</span><span>; </span><span>114</span> <span>case</span> 8: <span>115</span> <span>$mes</span>="由于PHP的擴(kuò)展程序中斷了文件上傳";<span>//</span><span>UPLOAD_ERR_EXTENSION</span> <span>116</span> <span>break</span><span>; </span><span>117</span> <span> } </span><span>118</span> <span>echo</span> <span>$mes</span><span>; </span><span>119</span> <span> } </span><span>120</span> <span> } </span><span>121</span> <span>return</span> <span>$uploadedFiles</span><span>; </span><span>122</span> <span>}; </span><span>123</span> <span>124</span> <span>$rows</span>=uploadFile(<span>$path</span>="uploads",<span>$allowExt</span>=<span>array</span>("gif","jpeg","png","jpg","wbmp"),<span>$maxSize</span>=2097152,<span>$imgFlag</span>=<span>true</span><span>); </span><span>125</span> <span>126</span> <span>echo</span> json_encode(<span>$rows</span>);
?
uploadFile($path="uploads",$allowExt=array("gif","jpeg","png","jpg","wbmp"),$maxSize=2097152,$imgFlag=true);
這段php代碼可以更改的可以上傳其他文件和大小限制。getimagesize是判斷是否為病毒文件更改后綴。
上述代碼直接復(fù)制即可完成圖片和用戶數(shù)據(jù)的同時(shí)上傳。
返回結(jié)果:[{"name":"d032a4ee7e957d956c8af0039d7e3085.jpg","error":0,"filesiz":{"0":720,"1":1280,"2":2,"3":"width=\"720\" height=\"1280\"","bits":8,"channels":3,"mime":"image\/jpeg"},"path_name":"uploads\/d032a4ee7e957d956c8af0039d7e3085.jpg"}]

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門(mén)文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

用戶語(yǔ)音輸入通過(guò)前端JavaScript的MediaRecorderAPI捕獲並發(fā)送至PHP後端;2.PHP將音頻保存為臨時(shí)文件後調(diào)用STTAPI(如Google或百度語(yǔ)音識(shí)別)轉(zhuǎn)換為文本;3.PHP將文本發(fā)送至AI服務(wù)(如OpenAIGPT)獲取智能回復(fù);4.PHP再調(diào)用TTSAPI(如百度或Google語(yǔ)音合成)將回復(fù)轉(zhuǎn)為語(yǔ)音文件;5.PHP將語(yǔ)音文件流式返回前端播放,完成交互。整個(gè)流程由PHP主導(dǎo)數(shù)據(jù)流轉(zhuǎn)與錯(cuò)誤處理,確保各環(huán)節(jié)無(wú)縫銜接。

在PHP中搭建社交分享功能的核心方法是通過(guò)動(dòng)態(tài)生成符合各平臺(tái)要求的分享鏈接。 1.首先獲取當(dāng)前頁(yè)面或指定的URL及文章信息;2.使用urlencode對(duì)參數(shù)進(jìn)行編碼;3.根據(jù)各平臺(tái)協(xié)議拼接生成分享鏈接;4.在前端展示鏈接供用戶點(diǎn)擊分享;5.動(dòng)態(tài)生成頁(yè)面OG標(biāo)籤優(yōu)化分享內(nèi)容展示;6.務(wù)必對(duì)用戶輸入進(jìn)行轉(zhuǎn)義以防止XSS攻擊。該方法無(wú)需複雜認(rèn)證,維護(hù)成本低,適用於大多數(shù)內(nèi)容分享需求。

要實(shí)現(xiàn)PHP結(jié)合AI進(jìn)行文本糾錯(cuò)與語(yǔ)法優(yōu)化,需按以下步驟操作:1.選擇適合的AI模型或API,如百度、騰訊API或開(kāi)源NLP庫(kù);2.通過(guò)PHP的curl或Guzzle調(diào)用API並處理返回結(jié)果;3.在應(yīng)用中展示糾錯(cuò)信息並允許用戶選擇是否採(cǎi)納;4.使用php-l和PHP_CodeSniffer進(jìn)行語(yǔ)法檢測(cè)與代碼優(yōu)化;5.持續(xù)收集反饋並更新模型或規(guī)則以提升效果。選擇AIAPI時(shí)應(yīng)重點(diǎn)評(píng)估準(zhǔn)確率、響應(yīng)速度、價(jià)格及對(duì)PHP的支持。代碼優(yōu)化應(yīng)遵循PSR規(guī)範(fàn)、合理使用緩存、避免循環(huán)查詢(xún)、定期審查代碼,並藉助X

1.評(píng)論系統(tǒng)商業(yè)價(jià)值最大化需結(jié)合原生廣告精準(zhǔn)投放、用戶付費(fèi)增值服務(wù)(如上傳圖片、評(píng)論置頂)、基於評(píng)論質(zhì)量的影響力激勵(lì)機(jī)制及合規(guī)匿名數(shù)據(jù)洞察變現(xiàn);2.審核策略應(yīng)採(cǎi)用前置審核 動(dòng)態(tài)關(guān)鍵詞過(guò)濾 用戶舉報(bào)機(jī)制組合,輔以評(píng)論質(zhì)量評(píng)分實(shí)現(xiàn)內(nèi)容分級(jí)曝光;3.防刷需構(gòu)建多層防禦:reCAPTCHAv3無(wú)感驗(yàn)證、Honeypot蜜罐字段識(shí)別機(jī)器人、IP與時(shí)間戳頻率限制阻止灌水、內(nèi)容模式識(shí)別標(biāo)記可疑評(píng)論,持續(xù)迭代應(yīng)對(duì)攻擊。

PHP不直接進(jìn)行AI圖像處理,而是通過(guò)API集成,因?yàn)樗瞄L(zhǎng)Web開(kāi)發(fā)而非計(jì)算密集型任務(wù),API集成能實(shí)現(xiàn)專(zhuān)業(yè)分工、降低成本、提升效率;2.整合關(guān)鍵技術(shù)包括使用Guzzle或cURL發(fā)送HTTP請(qǐng)求、JSON數(shù)據(jù)編解碼、API密鑰安全認(rèn)證、異步隊(duì)列處理耗時(shí)任務(wù)、健壯錯(cuò)誤處理與重試機(jī)制、圖像存儲(chǔ)與展示;3.常見(jiàn)挑戰(zhàn)有API成本失控、生成結(jié)果不可控、用戶體驗(yàn)差、安全風(fēng)險(xiǎn)和數(shù)據(jù)管理難,應(yīng)對(duì)策略分別為設(shè)置用戶配額與緩存、提供prompt指導(dǎo)與多圖選擇、異步通知與進(jìn)度提示、密鑰環(huán)境變量存儲(chǔ)與內(nèi)容審核、雲(yún)存

PHP通過(guò)數(shù)據(jù)庫(kù)事務(wù)與FORUPDATE行鎖確保庫(kù)存扣減原子性,防止高並發(fā)超賣(mài);2.多平臺(tái)庫(kù)存一致性需依賴(lài)中心化管理與事件驅(qū)動(dòng)同步,結(jié)合API/Webhook通知及消息隊(duì)列保障數(shù)據(jù)可靠傳遞;3.報(bào)警機(jī)制應(yīng)分場(chǎng)景設(shè)置低庫(kù)存、零/負(fù)庫(kù)存、滯銷(xiāo)、補(bǔ)貨週期和異常波動(dòng)策略,並按緊急程度選擇釘釘、短信或郵件通知責(zé)任人,且報(bào)警信息需完整明確,以實(shí)現(xiàn)業(yè)務(wù)適配與快速響應(yīng)。

PHPisstillrelevantinmodernenterpriseenvironments.1.ModernPHP(7.xand8.x)offersperformancegains,stricttyping,JITcompilation,andmodernsyntax,makingitsuitableforlarge-scaleapplications.2.PHPintegrateseffectivelyinhybridarchitectures,servingasanAPIgateway

選擇合適AI語(yǔ)音識(shí)別服務(wù)並集成PHPSDK;2.用PHP調(diào)用ffmpeg將錄音轉(zhuǎn)為API要求格式(如wav);3.上傳文件至雲(yún)存儲(chǔ)並調(diào)用API異步識(shí)別;4.解析JSON結(jié)果並用NLP技術(shù)整理文本;5.生成Word或Markdown文檔完成會(huì)議記錄自動(dòng)化,全過(guò)程需確保數(shù)據(jù)加密、訪問(wèn)控制與合規(guī)性以保障隱私安全。
