


JQ plug-in ajaxFileUpload, php to implement pictures, data uploaded at the same time, _PHP tutorial
Jul 12, 2016 am 08:54 AMJQ plug-in ajaxFileUpload and php implement images and data are uploaded at the same time.
The code structure is as follows:
1. HTML code, no need to explain.
<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="</span><span>'</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="'+data[0].path_name+'">')</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. Regarding the ajaxFileUpload plug-in, in the following code, if you are using JQ1.9 or above, please copy 1-12 to your ajaxFileUpload code. JQ abandoned the handleError method very early. Comments explain the code very clearly.
<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為當前系統(tǒng)時間字符串,uri是外部傳入的json對象的一個參數(shù)</span> <span> 14</span> <span>//</span><span>create frame</span> <span> 15</span> <span>var</span> frameId = 'jUploadFrame' + id; <span>//</span><span>給iframe添加一個獨一無二的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>將動態(tài)iframe追加到body中</span> <span> 26</span> <span>return</span> jQuery('#' + frameId).get(0); <span>//</span><span>返回iframe對象</span> <span> 27</span> <span> }, </span><span> 28</span> createUploadForm: <span>function</span> (id, fileElementId, data) {<span>//</span><span>id為當前系統(tǒng)時間字符串,fileElementId為頁面<input type='file' />的id,data的值需要根據(jù)傳入json的鍵來決定</span> <span> 29</span> <span>//</span><span>create form </span> <span> 30</span> <span>var</span> formId = 'jUploadForm' + id; <span>//</span><span>給form添加一個獨一無二的id</span> <span> 31</span> <span>var</span> fileId = 'jUploadFile' + id; <span>//</span><span>給<input type='file' />添加一個獨一無二的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的內容,創(chuàng)建隱藏域,這部分我還不知道是什么時候用到。估計是傳入json的時候,如果默認傳一些參數(shù)的話要用到。</span> <span> 36</span> <span> } </span><span> 37</span> } <span>var</span> oldElement = jQuery('#' + fileElementId); <span>//</span><span>得到頁面中的<input type='file' />對象</span> <span> 38</span> <span>var</span> newElement = jQuery(oldElement).clone(); <span>//</span><span>克隆頁面中的<input type='file' />對象</span> <span> 39</span> jQuery(oldElement).attr('id', fileId); <span>//</span><span>修改原對象的id</span> <span> 40</span> jQuery(oldElement).before(newElement); <span>//</span><span>在原對象前插入克隆對象</span> <span> 41</span> jQuery(oldElement).appendTo(form); <span>//</span><span>把原對象插入到動態(tài)form的結尾處</span> <span> 42</span> <span>//</span><span>set attributes</span> <span> 43</span> jQuery(form).css('position', 'absolute'); <span>//</span><span>給動態(tài)form添加樣式,使其浮動起來,</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>把動態(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是個json對象,傳入一些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>此時的s對象是由jQuery.ajaxSettings和原s對象擴展后的對象</span> <span> 52</span> <span>var</span> id = <span>new</span> Date().getTime(); <span>//</span><span>取當前系統(tǒng)時間,目的是得到一個獨一無二的數(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)建動態(tài)form</span> <span> 54</span> <span>var</span> io = jQuery.createUploadIframe(id, s.secureuri); <span>//</span><span>創(chuàng)建動態(tài)iframe</span> <span> 55</span> <span>var</span> frameId = 'jUploadFrame' + id; <span>//</span><span>動態(tài)iframe的id</span> <span> 56</span> <span>var</span> formId = 'jUploadForm' + id; <span>//</span><span>動態(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>當jQuery開始一個ajax請求時發(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>請求完成標志</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>回調函數(shù)</span> <span> 66</span> <span>var</span> io = document.getElementById(frameId); <span>//</span><span>得到iframe對象</span> <span> 67</span> <span>try</span> { <span>if</span> (io.contentWindow) {<span>//</span><span>動態(tài)iframe所在窗口對象是否存在</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>動態(tài)iframe的文檔對象是否存在</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"都表示請求發(fā)出,并且有響應</span> <span> 77</span> requestDone = <span>true</span>; <span>//</span><span>請求完成</span> <span> 78</span> <span>var</span> status; <span>try</span><span> { </span><span> 79</span> status = isTimeout != "timeout" ? "success" : "error"; <span>//</span><span>如果不是“超時”,表示請求成功</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類型,返回json對象,此時返回的data就是后臺操作后的返回結果</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>設置超時時間</span> <span>103</span> <span>try</span><span> { </span><span>104</span> jQuery(io).remove();<span>//</span><span>移除動態(tài)iframe</span> <span>105</span> jQuery(form).remove();<span>//</span><span>移除動態(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>超時檢測</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>如果請求仍未完成,就發(fā)送超時信號</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頁面導向url</span> <span>119</span> jQuery(form).attr('method', 'POST');<span>//</span><span>設置提交表單方式</span> <span>120</span> jQuery(form).attr('target', frameId);<span>//</span><span>返回的目標iframe,就是創(chuà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 請求從服務器加載數(shù)據(jù),同時傳入回調函數(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 code
<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> * 得到文件的擴展名 </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> * 構建上傳文件信息 </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文件夾,沒有則創(chuàng)建</span> <span> 53</span> <span>mkdir</span>(<span>$path</span>,0777,<span>true</span>);<span>//</span><span>0777表示最大權限</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>檢測文件的擴展名</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>("非法文件類型"<span>); </span><span> 66</span> <span> } </span><span> 67</span> <span>//</span><span>校驗是否是一個真正的圖片類型</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>("不是真正的圖片類型"<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 傳到前臺返回時數(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>("上傳文件過大"<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>("不是通過HTTP POST方式上傳上來的"<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>="超過了配置文件上傳文件的大小";<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>="超過了表單設置上傳文件的大小"; <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>="沒有文件被上傳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>="沒有找到臨時目錄";<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>="文件不可寫";<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的擴展程序中斷了文件上傳";<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);
This php code can be changed to allow uploading other files and size limits. getimagesize is used to determine whether the suffix is ??changed for a virus file.
Copy the above code directly to complete the simultaneous upload of images and user data.
Return result: [{"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"}]

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

The method to get the current session ID in PHP is to use the session_id() function, but you must call session_start() to successfully obtain it. 1. Call session_start() to start the session; 2. Use session_id() to read the session ID and output a string similar to abc123def456ghi789; 3. If the return is empty, check whether session_start() is missing, whether the user accesses for the first time, or whether the session is destroyed; 4. The session ID can be used for logging, security verification and cross-request communication, but security needs to be paid attention to. Make sure that the session is correctly enabled and the ID can be obtained successfully.

To extract substrings from PHP strings, you can use the substr() function, which is syntax substr(string$string,int$start,?int$length=null), and if the length is not specified, it will be intercepted to the end; when processing multi-byte characters such as Chinese, you should use the mb_substr() function to avoid garbled code; if you need to intercept the string according to a specific separator, you can use exploit() or combine strpos() and substr() to implement it, such as extracting file name extensions or domain names.

UnittestinginPHPinvolvesverifyingindividualcodeunitslikefunctionsormethodstocatchbugsearlyandensurereliablerefactoring.1)SetupPHPUnitviaComposer,createatestdirectory,andconfigureautoloadandphpunit.xml.2)Writetestcasesfollowingthearrange-act-assertpat

In PHP, the most common method is to split the string into an array using the exploit() function. This function divides the string into multiple parts through the specified delimiter and returns an array. The syntax is exploit(separator, string, limit), where separator is the separator, string is the original string, and limit is an optional parameter to control the maximum number of segments. For example $str="apple,banana,orange";$arr=explode(",",$str); The result is ["apple","bana

JavaScript data types are divided into primitive types and reference types. Primitive types include string, number, boolean, null, undefined, and symbol. The values are immutable and copies are copied when assigning values, so they do not affect each other; reference types such as objects, arrays and functions store memory addresses, and variables pointing to the same object will affect each other. Typeof and instanceof can be used to determine types, but pay attention to the historical issues of typeofnull. Understanding these two types of differences can help write more stable and reliable code.

std::chrono is used in C to process time, including obtaining the current time, measuring execution time, operation time point and duration, and formatting analysis time. 1. Use std::chrono::system_clock::now() to obtain the current time, which can be converted into a readable string, but the system clock may not be monotonous; 2. Use std::chrono::steady_clock to measure the execution time to ensure monotony, and convert it into milliseconds, seconds and other units through duration_cast; 3. Time point (time_point) and duration (duration) can be interoperable, but attention should be paid to unit compatibility and clock epoch (epoch)

In PHP, to pass a session variable to another page, the key is to start the session correctly and use the same $_SESSION key name. 1. Before using session variables for each page, it must be called session_start() and placed in the front of the script; 2. Set session variables such as $_SESSION['username']='JohnDoe' on the first page; 3. After calling session_start() on another page, access the variables through the same key name; 4. Make sure that session_start() is called on each page, avoid outputting content in advance, and check that the session storage path on the server is writable; 5. Use ses

ToaccessenvironmentvariablesinPHP,usegetenv()orthe$_ENVsuperglobal.1.getenv('VAR_NAME')retrievesaspecificvariable.2.$_ENV['VAR_NAME']accessesvariablesifvariables_orderinphp.iniincludes"E".SetvariablesviaCLIwithVAR=valuephpscript.php,inApach
